PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसल एक्टिव रिकॉर्ड के साथ कई पंक्तियों को सम्मिलित करने के लिए अनुशंसित दृष्टिकोण और किसी भी नकल को अनदेखा करें

आप इसे एक एकल SQL कथन के साथ कर सकते हैं:

INSERT INTO user_recipe
SELECT new_UserId, new_RecipeId
FROM   user_recipe
WHERE  NOT EXISTS (
   SELECT *
   FROM   user_recipe
   WHERE  (UserId, RecipeId) = (new_UserId, new_RecipeId)
   );

SELECT केवल पंक्ति लौटाता है यदि वह पहले से मौजूद नहीं है, इसलिए इसे केवल इस मामले में डाला जाएगा।

बल्क इंसर्ट के लिए समाधान

यदि आपके पास एक बार में डालने के लिए व्यंजनों की एक लंबी सूची है, तो आप:

CREATE TEMP TABLE i(userId int, recipeid int) ON COMMIT DROP;

INSERT INTO i VALUES
(1,2), (2,4), (2,4), (2,7), (2,43), (23,113), (223,133);

INSERT INTO user_recipe
SELECT DISTINCT i.*  -- remove dupes from the insert candidates themselves
FROM   i
LEFT   JOIN user_recipe u USING (userid, recipeid)
WHERE  u.userid IS NULL;

एक बार में मुट्ठी भर डालने का समाधान

जैसा कि माइक ने टिप्पणी की थी, अस्थायी तालिका केवल कुछ रिकॉर्ड के लिए एक ओवरकिल होगी।

INSERT INTO user_recipe
SELECT i.* 
FROM  (
    SELECT DISTINCT *     -- only if you need to remove possible dupes
    FROM (
       VALUES (1::int, 2::int)
          ,(2, 3)
          ,(2, 4)
          ,(2, 4)            -- dupe will be removed
          ,(2, 43)
          ,(23, 113)
          ,(223, 133)
       ) i(userid, recipeid)
    ) i
LEFT   JOIN user_recipe u USING (userid, recipeid)
WHERE  u.userid IS NULL;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब मैं PostgreSQL में तालिका बनाता हूं तो कॉलम में टिप्पणी जोड़ना?

  2. pyodbc को Postgres . से कनेक्ट करें

  3. पोस्टग्रेज़ सभी सरणी मानों को एक ही कॉलम के साथ और शर्त के साथ मेल खाते हैं

  4. पोस्टग्रेएसक्यूएल दिनांक सी# दिनांक समय

  5. सर्कुलर औसत के लिए कस्टम PostgreSQL समुच्चय