मैंने सोचा कि यह एक साधारण प्रश्न होगा, लेकिन मुझे स्पष्ट रूप से वांछित डेटा को आउटपुट करने के लिए क्वेरी तर्क में समस्याएं आ रही हैं।

मैं दो तालिकाओं को क्वेरी करना चाहता हूं जिनमें तालिकाओं से संबंधित कुंजी है, और तालिका 1 (एक पंक्ति/रिकॉर्ड आउटपुट) से परिणाम आउटपुट करें और फिर तालिका 2 (एकाधिक पंक्तियों/रिकॉर्ड आउटपुट) से परिणाम आउटपुट करें।

मैंने बिना किसी लाभ के UNIQUE, DISTINCT और उपश्रेणियों की कोशिश की है।

यहाँ तालिका जानकारी है। और क्षेत्र:

टीबीएलफिल्म:

फिल्म आईडी (प्राथमिक कुंजी)

फ़िल्म


फिल्म1 (रिकॉर्ड)


Tblfilmछवि:

छवि आईडी

FilmID (विदेशी कुंजी, यानी tblfilm से प्राथमिक कुंजी)

छवि


छवि 1 (रिकॉर्ड)

छवि 2 (रिकॉर्ड)


और यहां सबसे हालिया चयन कथन है जिसे मैंने आजमाया है:

SELECT film, image FROM tblfilm, tblfilmimage
WHERE tblfilm.filmID = 2

FilmID = 2 tblfilm में एक फिल्म के लिए अद्वितीय है, और = tblfilmimages में कई छवियों के लिए, जो उस फिल्म के अभिनेताओं को दिखाती है। इस प्रकार समग्र लक्ष्य एक फिल्म के लिए कई छवियों को आउटपुट करने में सक्षम होना है।

वर्तमान अवांछित आउटपुट:

film1 image1 

film1 image2

* मैं दूसरे फिल्म 1 रिकॉर्ड को आउटपुट होने से खत्म करने की कोशिश कर रहा हूं।

वांछित आउटपुट:

film1  image1 image2

एकाधिक तालिकाओं से पूछताछ करते समय मैं MySQL का उपयोग करने के लिए काफी नया हूं। और मुझे यकीन है कि इसका एक आसान समाधान है, लेकिन मैं तर्क के इर्द-गिर्द अपना सिर नहीं लपेट सकता। इस प्रकार किसी भी टिप्पणी या सुझाव की सराहना की। धन्यवाद।

अद्यतन: अब मुझे एहसास हुआ कि मेरा मूल प्रश्न तर्क त्रुटिपूर्ण था ... और मेरा उदाहरण बहुत स्पष्ट नहीं है। जवाब देने वालों द्वारा दिया गया समाधान मैंने मूल रूप से जो लिखा था, उसके लिए सही था। धन्यवाद। मैं जो हासिल करने की कोशिश कर रहा हूं उसे स्पष्ट करने की कोशिश करूंगा।

TableA में कई फिल्मों की सूची है (उदाहरण):

आस्ट्रेलिया के जादूगर

हवा के साथ चला गया ... आदि।

टेबलबी में छवियों की एक सूची है (उदाहरण):

आस्ट्रेलिया के जादूगर Image1

आस्ट्रेलिया के जादूगर Image2

ओज़ इमेज 3 ... आदि का जादूगर।

हवा के साथ चला गया Image1

पवन छवि 2 ... आदि के साथ चला गया।

क्वेरी का वांछित आउटपुट होगा:

आस्ट्रेलिया के जादूगर

आस्ट्रेलिया के जादूगर Image1

आस्ट्रेलिया के जादूगर Image2

आस्ट्रेलिया के जादूगर Image3

हवा में उड़ गया

हवा के साथ चला गया Image1

हवा के साथ चला गया Image2

... और इसी तरह सैकड़ों फिल्मों और सैकड़ों और छवियों के साथ।

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

0
obcbeatle 14 जुलाई 2019, 23:28

1 उत्तर

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

नए कॉलम बनाने के लिए सामान्य कॉलम filmID द्वारा अपनी क्वेरी में correlated subqueries का उपयोग करें:

SELECT film, 
       (SELECT image FROM tblfilmimage WHERE imageID=1 and filmID = f.filmID ) as image1, 
       (SELECT image FROM tblfilmimage WHERE imageID=2 and filmID = f.filmID ) as image2
  FROM tblfilm f
 WHERE f.filmID = 2;

या, एक बेहतर विकल्प के रूप में सीधे conditional aggregation का उपयोग करें:

SELECT film, 
       MAX(CASE WHEN i.imageID=1 THEN i.image END ) as image1, 
       MAX(CASE WHEN i.imageID=2 THEN i.image END ) as image2
  FROM tblfilm f
  JOIN tblfilmimage i on i.filmID = f.filmID
 WHERE f.filmID = 2
 GROUP BY film;

जहां केवल मेरे द्वारा ImageID कॉलम के मान मान लिए गए हैं।

आपके मामले में आपके पास अल्पविराम से अलग तालिकाओं का उपयोग करके CROSS JOIN था। तो, उसके माध्यम से बिना सहसंबंध के कई पंक्तियाँ उत्पन्न हुईं। इस शैली का सुझाव नहीं दिया गया है, और SQL Select Statements के लिए पुराने-वाक्यविन्यास के रूप में माना जाता है। जब भी जॉइन की आवश्यकता हो, इस जॉइन सिंटैक्स का उपयोग करना पसंद करें जिसे ANSI-92 मानक कहा जाता है, पढ़ने, समझने और बनाए रखने में आसान।

1
Barbaros Özhan 15 जुलाई 2019, 23:03