phpMyAdmin
 sql >> डेटाबेस >  >> Database Tools >> phpMyAdmin

एकाधिक तालिकाओं पर SQL क्वेरी

यहां सिंटैक्स त्रुटि यह है कि आपको on . की आवश्यकता है आपके left join . के लिए खंड . लेकिन अंतर्निहित वैचारिक समस्या अलग है:आप join आश्रित सबक्वायरी . के साथ ।

आप अपनी क्वेरी को इस तरह ठीक कर सकते हैं:

select items.* 
from items 
LEFT OUTER JOIN (
  select item_id, sum(purchase_details.quantity) as total
  from purchase_details 
  GROUP BY purchase_details.item_id
) ABC on ABC.item_id = items.id;

इससे आपका आंतरिक where ले जाया गया -कंडीशन (जो items.id . पर निर्भर करेगा) , जिसकी अनुमति नहीं है, क्योंकि यह दायरे से बाहर है) on . पर -खंड। इस प्रकार item_id आंतरिक select . में भी जोड़ा जाता है (जैसा कि बाहर इसकी जरूरत है)।

इसे लिखने का एक अलग तरीका होगा

select items.*, 
   (select sum(purchase_details.quantity) 
    from purchase_details 
    where purchase_details.item_id=items.id) as total
from items;

यहां आपके पास एक आश्रित उपश्रेणी है :भीतरी where -क्लॉज बाहरी items.id . पर निर्भर करता है . आपको group by . की आवश्यकता नहीं है अब, where . के रूप में -कंडीशन पहले से ही उस आइटम के लिए केवल पंक्तियों का उपयोग करता है। (और आप इस संदर्भ में वैसे भी केवल एक ही पंक्ति में लौट सकते हैं।)

दोनों प्रश्न समान हैं, और (यदि अनुकूलक उस निष्पादन योजना को पाता है) आंतरिक रूप से वास्तव में उसी तरह से निष्पादित किया जा सकता है (जब तक आप उचित अनुक्रमणिका प्रदान करते हैं, तब तक आपको इसके बारे में ज्यादा परवाह करने की आवश्यकता नहीं है)।

तो आपके मामले में आप दोनों का उपयोग कर सकते हैं (और शायद जांचें कि कौन सा तेज़ है); यदि आप उस आइटम के लिए अतिरिक्त जानकारी प्राप्त करना चाहते हैं, तो आपको left join पसंद करना चाहिए -वर्जन हालांकि, उदा। उपयोग करें

...
LEFT OUTER JOIN (
  select item_id, 
    sum(purchase_details.quantity) as total,
    count(purchase_details.item_id) as cnt,
    max(purchase_details.quantity) as max_quantity_per_order,
    max(purchase_details.date) as latest_order,
    ...
  from purchase_details 
  GROUP BY purchase_details.item_id
) ABC on ABC.item_id = items.id;



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. PhpMyAdmin में तालिकाओं के बीच संबंध कैसे स्थापित करें

  2. सर्वर SQL त्रुटि के लिए Wordpress डेटाबेस माइग्रेट करना

  3. Mysql में दो कॉलम के बीच अंतर

  4. phpMyAdmin घातक त्रुटि:अपरिभाषित फ़ंक्शन पर कॉल करें __()

  5. phpMyAdmin आपके द्वारा अपलोड कार्य के लिए सेट की गई निर्देशिका तक नहीं पहुंचा जा सकता