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

एकाधिक तालिकाओं से चुनें *। माई एसक्यूएल

आप यहां जो करते हैं उसे JOIN कहा जाता है। (हालाँकि आप इसे परोक्ष रूप से करते हैं क्योंकि आप कई तालिकाओं से चयन करते हैं)। इसका मतलब है, अगर आपने अपने WHERE क्लॉज में कोई शर्त नहीं रखी थी, तो आपके पास सभी संयोजन थे उन तालिकाओं में से। केवल अपनी शर्त के साथ आप अपने शामिल होने को उन पंक्तियों तक सीमित रखते हैं जहां पेय आईडी मेल खाती है।

लेकिन प्रत्येक पेय के परिणाम में अभी भी एक्स एकाधिक पंक्तियां हैं, यदि इस विशेष पेय_आईडी के साथ एक्स तस्वीरें हैं। आपका कथन जो . को प्रतिबंधित नहीं करता है फोटो जो आप लेना चाहते हैं!

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

आपके मामले में, यदि आप केवल एक पंक्ति चाहते हैं, तो मैं पेय के लिए फ़ोटो पूछने का अर्थ नहीं देख सकता। आपने शायद सोचा था कि आपके पास फ़ोटो की एक सरणी हो सकती है प्रत्येक पेय के लिए आपके परिणाम में, लेकिन SQL ऐसा नहीं कर सकता। अगर आप केवल कोई भी चाहते हैं फोटो और आपको परवाह नहीं है कि आपको क्या मिलेगा, बस पेय_आईडी द्वारा समूहित करें (प्रति पेय केवल एक पंक्ति प्राप्त करने के लिए):

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg

MySQL में, हमारे पास GROUP_CONCAT भी है। , यदि आप चाहते हैं कि फ़ाइल नामों को एक एकल स्ट्रिंग से जोड़ा जाए:

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew      4       ./images/dew-1.jpg,./images/dew-2.jpg

हालांकि, यह खतरनाक हो सकता है यदि आपके पास , . है फ़ील्ड मानों के भीतर, क्योंकि सबसे अधिक संभावना है कि आप इसे क्लाइंट साइड पर फिर से विभाजित करना चाहते हैं। यह एक मानक SQL एग्रीगेट फ़ंक्शन भी नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL के लिए स्केलिंग समाधान (प्रतिकृति, क्लस्टरिंग)

  2. mysql में कई पंक्तियों को सम्मिलित करना

  3. MySQL में किसी डेटाबेस के कैरेक्टर सेट और कॉलेशन को कैसे सेट करें

  4. क्या जावास्क्रिप्ट MySQL से जुड़ सकता है?

  5. MySQL DATETIME फ़ील्ड से स्ट्रिंग के साथ DATE स्ट्रिंग की तुलना करें