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

MySQL - उन संख्याओं की सूची में से चुनें, जिनका किसी तालिका के आईडी फ़ील्ड में कोई समकक्ष नहीं है

यह एक ऐसी समस्या है जो बहुत आम है:एक टेबल बनाए बिना मक्खी पर संबंध बनाना। इस समस्या के लिए SQL समाधान बहुत अजीब हैं। व्युत्पन्न तालिका का उपयोग करने वाला एक उदाहरण:

SELECT n.id
FROM
  (SELECT 2 AS id 
   UNION SELECT 3 
   UNION SELECT 4 
   UNION SELECT 5 
   UNION SELECT 6 
   UNION SELECT 7) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

लेकिन यह बहुत अच्छा पैमाना नहीं है, क्योंकि आपके पास केवल छह के बजाय कई मान हो सकते हैं। एक UNION . के साथ एक लंबी सूची बनाना थकाऊ हो सकता है प्रति मूल्य की आवश्यकता है।

एक अन्य उपाय यह है कि दस अंकों की एक सामान्य-उद्देश्य तालिका को हाथ में रखा जाए, और इसे कई उद्देश्यों के लिए बार-बार उपयोग किया जाए।

CREATE TABLE num (i int);
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

SELECT n.id
FROM 
  (SELECT n1.i + n10.i*10 AS id
   FROM num AS n1 CROSS JOIN num AS n10
   WHERE n1.i + n10.i*10 IN (2, 3, 4, 5, 6, 7)) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

मैं 0..99 से मान उत्पन्न करने वाली आंतरिक क्वेरी दिखाता हूं, भले ही यह इस मामले के लिए आवश्यक नहीं है। लेकिन आपकी सूची में आपके मान 10 से अधिक हो सकते हैं। मुद्दा यह है कि एक टेबल के साथ num , आप एक UNION . के साथ बहुत लंबी श्रृंखलाओं का सहारा लिए बिना बड़ी संख्या में उत्पन्न कर सकते हैं प्रति मूल्य। साथ ही, आप वांछित मानों की सूची एक ही स्थान पर निर्दिष्ट कर सकते हैं, जो अधिक सुविधाजनक और पठनीय है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वाइल्डकार्ड के रूप में व्यवहार किए बिना LIKE में प्रतिशत (%) का उपयोग कैसे करें?

  2. दूरस्थ MySQL होस्ट से कनेक्ट करने का प्रयास कर रहा है (त्रुटि 2003)

  3. स्क्रैच से पायथन फ्लास्क और MySQL का उपयोग करके एक वेब ऐप बनाना:भाग 3

  4. MySQLi के साथ डेटाबेस में सभी तालिकाओं को सूचीबद्ध करें

  5. SQLite MySQL से तेज?