2 असंबद्ध तालिकाएँ हैं, जिनमें कोई सामान्य आईडी नहीं है

+---------------------+
| names               |
+------+--------------+
| name        | lastN |
+-------------+-------+
| Anthony     | monta |
| Ryo         | shizu |
+------+--------------+

+----------------------+
| nicknames            |
+------+---------------+
| nickname             |
+------+---------------+
| miso_hungry          |
+------+---------------+

मैं दोनों टेबलों पर एक चुनिंदा क्वेरी चलाने की कोशिश कर रहा हूं और वर्तमान में कुछ ऐसा कर रहा हूं:

SELECT names.name, nicknames.nickname
FROM names, nicknames
WHERE names.name="miso_hungry" OR nicknames.nickname="miso_hungry"

मैं समान पंक्तियों को दोहराने के साथ एक अजीब परिणाम प्राप्त कर रहा हूं, जिसका कोई मतलब नहीं है।

उदाहरण के लिए यदि मैं उपरोक्त क्वेरी के साथ miso_hungry खोजता हूं तो यह किसी कारण से "नाम" तालिका की प्रत्येक पंक्ति को वापस कर देगा और "उपनाम" तालिका से सही पंक्तियों को जोड़ देगा ..

परिणामों का स्क्रीनशॉट संलग्न करना

enter image description here

ऊपर नाम कॉलम के तहत "NULL" दिखाना चाहिए, क्योंकि उस कॉलम में "miso_hungry" नहीं मिला है और मुझे यकीन नहीं है कि यह "names" टेबल की हर पंक्ति को भी प्रिंट क्यों करता है।

-1
Robert Sinclair 17 मई 2017, 08:42

2 जवाब

सबसे बढ़िया उत्तर

आप यूनियन क्लॉज का उपयोग कर सकते हैं

  • UNION के भीतर प्रत्येक SELECT स्टेटमेंट में समान संख्या में कॉलम होने चाहिए
  • कॉलम में समान डेटा प्रकार भी होने चाहिए
  • प्रत्येक SELECT स्टेटमेंट में कॉलम भी उसी क्रम में होने चाहिए

इसलिए हमें उन्हें उपरोक्त शर्त को पूरा करने की आवश्यकता है। हम ऐसा करने के लिए अलियासिंग का उपयोग कर सकते हैं।

SELECT name,(SELECT NULL) as nickname FROM names WHERE name = "miso_hungry"

UNION

SELECT (SELECT NULL) as name, nickname FROM nicknames WHERE nickname = "miso_hungry"

संपादित

यदि आप नीचे दिए गए दोनों तालिका उपयोग क्वेरी से मिलान गणना प्राप्त करना चाहते हैं:

SELECT SUM(count) as count FROM ( 
    SELECT count(*) as count FROM names WHERE name = "miso_hungry"
    UNION ALL
    SELECT count(*) as count FROM nicknames WHERE nickname = "miso_hungry"
) both_table 
3
Ashraful Islam 17 मई 2017, 19:39

आपके कथन में निष्पादन का क्रम है, जहाँ से, चयन करें। के साथ और अंतर्निहित जुड़ाव आपको एक कार्टेशियन उत्पाद मिलता है जो दिया गया है

use sandbox;
create table n(name varchar(20));
create table nn(nickname varchar(20));

insert into n values('Antony'),('Ryo');
insert into nn values('miso');

का परिणाम

MariaDB [sandbox]> SELECT n.name, nn.nickname
    -> FROM n, nn;
+--------+----------+
| name   | nickname |
+--------+----------+
| Antony | miso     |
| Ryo    | miso     |
+--------+----------+
2 rows in set (0.00 sec)

जहां क्लॉज तब लागू होता है - जो समान परिणाम देता है।

1
P.Salmon 17 मई 2017, 09:29