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

SQL - बाएँ 2 विदेशी कुंजियों को 1 प्राथमिक कुंजी से मिलाएँ

मैं अक्सर देखता हूं कि लोग एक ही प्रश्न में एक तालिका में शामिल होने के विचार से या एक ही प्रश्न में कई बार संघर्ष करते हैं (जैसा कि यह यहां था)। एक बार महारत हासिल करने के बाद, यह उन तालिकाओं पर उपयोग करने के लिए एक बेहतरीन तकनीक है, जिनमें पंक्तियों के बीच बहुत सारे संबंध होते हैं (जैसे कि टीमों की सूची जिन्हें एक-दूसरे के साथ खेलना है!) जैसा कि अन्य ने बताया है, आपको दो inner join . का उपयोग करने की आवश्यकता है इसे पूरा करने के लिए:

select
    *
from
    games g
    inner join teams t1 on
        g.teamid1 = t1.teamid
    inner join teams t2 on
        g.teamid2 = t2.teamid

तो, अगर आपके games तालिका इस तरह दिखती है:

GameID    TeamID1    TeamID2
----------------------------
     1          1          3
     2          4          2
     3          2          1

आपको इसका परिणाम सेट मिलेगा:

g.GameID    g.TeamID1    g.TeamID2    t1.TeamID    t1.Name    t2.TeamID    t2.Name
----------------------------------------------------------------------------------
       1            1            3            1    Lions              3    Bears
       2            4            2            4    Oh My              2    Tigers
       3            2            1            2    Tigers             1    Lions

बेशक, मैं इन स्तंभों को select . में उपनाम दूंगा कथन, अगर मैं मैं होता, तो प्रयोज्य के लिए:

select
    g.GameID,
    t1.Name as Team1,
    t2.Name as Team2
from
    ...

इस तरह, t1 . होने के बजाय, स्तंभों को उचित नाम दिया जा सकता है और t2 कॉलम समान नाम साझा करते हैं।

अब, इस भ्रम को दूर करने के लिए कि left join है। आप देखें, एक left join पहली (या बाईं) तालिका से सभी पंक्तियों को ले जाएगा, और फिर दूसरी (या दाएं) तालिका में शामिल होने की स्थिति में किसी भी पंक्ति का मिलान करेगा। बाईं तालिका से किसी भी पंक्ति के लिए, आपको null मिलेगा right . के सभी कॉलम में टेबल।

एक उदाहरण पर विचार करते हुए, मान लें कि किसी ने null . में डाल दिया है TeamID2 . के लिए किसी भी कारण से पंक्तियों में से एक पर। यह भी मान लें कि TeamID . की एक टीम 4 पहले मौजूद था, लेकिन अब नहीं है।

GameID    TeamID1    TeamID2
----------------------------
     1          1          3
     2          4          2
     3          1       null

अब, आइए एक नजर डालते हैं कि left join प्रश्न के संदर्भ में होगा:

select
    *
from
    games g
    left join teams t1 on
        g.teamid1 = t1.teamid
    left join teams t2 on
        g.teamid2 = t2.teamid

तार्किक रूप से, यह हमारे सभी games को हथिया लेगा , और फिर उनका संबंधित teams . से मिलान करें . हालांकि, अगर एक TeamID मौजूद नहीं है, हमें null मिलेगा एस। यह ऐसा दिखेगा:

g.GameID    g.TeamID1    g.TeamID2    t1.TeamID    t1.Name    t2.TeamID    t2.Name
----------------------------------------------------------------------------------
       1            1            3            1    Lions              3    Bears
       2            4            2         null    null               2    Tigers
       3            1         null            1    Lions           null    null

इसलिए, एक left join होगा केवल यदि कोई टीम वैकल्पिक हो तो आवश्यक हो।

आपके मामले में, आप एक inner join . का उपयोग करेंगे एक तालिका में कई बार शामिल होने के लिए। यह एक बहुत ही सामान्य अभ्यास है और काफी उपयोगी है। यह सबक्वायरी (विशेष रूप से MySQL पर) के कुछ नुकसान से बचा जाता है, जबकि आपको इंट्राटेबल तुलना के लिए टेबल से डेटा हथियाने की अनुमति देता है। किसी चीज़, या संबंधित पंक्तियों के क्रम को खोजने का प्रयास करते समय यह स्पष्ट रूप से उपयोगी होता है।

वैसे भी, मुझे आशा है कि यह बहुत ही मनोरंजक उत्तर कहीं न कहीं किसी की मदद करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ध्यान में न आया त्रुटि:devtools बंद के साथ गलत क्रम में प्राप्त पैकेट - इलेक्ट्रॉन + MySQL नोड ड्राइवर + वेबपैक

  2. चयनित कॉलम में संगत प्रकार नहीं है, यहां तक ​​कि इसका एक ही प्रकार है

  3. कमांड लाइन से MySQL डेटाबेस, उपयोगकर्ता और तालिकाओं का प्रबंधन कैसे करें

  4. mysql डेटाबेस से कनेक्ट नहीं हो सकता [स्ट्रेटो]

  5. PHP MySQL एकाधिक खोज क्वेरी विकल्प का उपयोग कर / HTML फॉर्म टैग का चयन करें