जॉइन के अंदर सेलेक्ट स्टेटमेंट में जहां क्लॉज को हार्ड कोड किए बिना उन मानों को पास करने की आवश्यकता होगी, लेकिन मैं सिर्फ TN.id1 = b.id1, TN.id2 = b.id2, आदि ... को अंदर नहीं रख सकता। वह कथन क्योंकि इसे बाध्य नहीं किया जा सकता है।
SELECT
a.DateCreated,
*
from B1 b
LEFT JOIN
(
SELECT
MIN(GGI.DATE) DateCreated,
GI.TEXT,
TN.ID1,
TN.ID2,
TN.ID3
FROM TABLENAME TN
LEFT JOIN GITEM GI ON
GI.SEQ_NBR = TN.SEQ_NBR
AND GI.STATUS = 'Approved'
WHERE
TN.ID1 = 'AP17'
AND TN.ID2 = '0'
AND TN.ID3 = '1'
GROUP BY GI.TEXT, TN.ID1, TN.ID2, TN.ID3
) a ON
b.ID1 = a.ID1
AND b.ID2 = a.ID2
AND b.ID3 = a.ID3
WHERE b.ID1 = 'AP17'
AND b.ID2 = '0'
AND b.ID3 = '1'
क्या इसे सबक्वायरी के बिना फिर से लिखा जा सकता है?
मैं ऐसा कुछ करने की कोशिश कर रहा हूं (उपरोक्त क्वेरी से अंश):
WHERE
TN.ID1 = b.ID1
AND TN.ID2 = b.ID2
AND TN.ID3 = b.ID3
GROUP BY GI.TEXT, TN.ID1, TN.ID2, TN.ID3
नमूना डेटा:
इस तालिका में तालिका "तालिका 1" मुझे केवल पहली पंक्ति की परवाह है।
ID1 ID2 ID3 Text
AP17 0 1 Red
AP17 0 2 Green
AP17 0 3 Blue
तालिका "तालिका 2" - इस तालिका से मुझे सभी "SEQ_NBR" पंक्तियों का उपयोग करने की आवश्यकता है जो अगली तालिका में डेटा प्राप्त करने के लिए अंतिम तालिका में पहली पंक्ति से मेल खाते हैं।
ID1 ID2 ID3 SEQ_NBR
AP17 0 1 1
AP17 0 1 2
AP17 0 1 3
AP17 0 2 4
तालिका "तालिका 3" - मैं प्रत्येक अलग प्रकार के "आइटम" के लिए पंक्तियाँ बनाना चाहता हूँ, जिसकी स्थिति "ए" पर सेट की गई थी।
SEQ_NBR Status Item DATE
1 I APPLE 12/05/17
2 A APPLE 12/10/17
3 A APPLE 12/13/17
1 A Cup 12/05/17
2 A Cup 12/10/17
3 A Cup 12/13/17
1 I Item3 12/05/17
2 I Item3 12/10/17
3 A Item3 12/13/17
मैं जो डेटा खींच रहा हूं वह ऐसा दिखेगा जिसकी हमेशा "तालिका 3" में सबसे पुरानी तारीख होगी जहां स्थिति "ए" पर सेट की गई थी:
DateCreated ID1 ID2 ID3 Item
12/10/17 AP17 0 1 Apple
12/05/17 AP17 0 1 Cup
12/13/17 AP17 0 1 Item3
2 जवाब
बहुत यकीन है कि यह एक मूल समग्र क्वेरी है। यह प्रदान किए गए नमूना डेटा के लिए वांछित आउटपुट देता है।
select DateCreated = MIN(MyDate)
, t2.ID1
, t2.ID2
, t2.ID3
, t3.Item
from Table1 t1
join Table2 t2 on t2.ID1 = t1.ID1
and t2.ID2 = t1.ID2
join Table3 t3 on t3.SEQ_NBR = t2.SEQ_NBR
and t3.Status = 'A'
group by t2.ID1
, t2.ID2
, t2.ID3
, t3.Item
मुझे विश्वास है कि आप इस तरह फिर से लिख सकते हैं। मैं थोड़ा अनुमान लगा रहा हूं क्योंकि यह सुपर स्पष्ट नहीं है कि सभी आवश्यकताओं को सूचीबद्ध किया गया है क्योंकि आप कहते हैं "उपरोक्त सबक्वायरी का उपयोग न करने के लिए मेरी क्वेरी को दोबारा लिखें" और आपका एसक्यूएल सिर्फ आईडी 1, आईडी 2 और आईडी 3 द्वारा एक विशेष परिणाम प्राप्त करता है। फिर आप हमें टेबल देते हैं और आवश्यकताएं बदल जाती हैं "जिसमें हमेशा" टेबल 3 "में सबसे शुरुआती तारीख होगी जहां स्थिति" ए "" पर सेट की गई थी, जो कि आपका एसक्यूएल नहीं कर रहा है। उस दूसरी आवश्यकता को देखते हुए और पहले को अनदेखा करना:
SELECT
git.date,
table3.id1,
table3.id2,
table3.id3,
b1.text
FROM
gitem as git
INNER JOIN table3 ON
git.seq_nbr = table3.seq_nbr
INNER JOIN b1 ON
table3.id1 = b1.id1 AND
table3.id2 = b1.id2 AND
table3.id3 = b1.id3
WHERE
git.status = 'A' AND
git.date = (SELECT min(date) FROM gitem WHERE status='A')
यह रंग, id1, id2, id3, और तारीख को खींच लेगा जहां तारीख 'ए' की स्थिति के साथ पहली तारीख है। ऐसा लगता है कि क्वेरी क्या कर रही है, इसके बारे में थोड़ा स्पष्ट है, लेकिन यह अभी भी एक सबक्वायरी का उपयोग करता है। यह सिर्फ इतना है कि सबक्वेरी केवल आपकी आवश्यकताओं के अनुसार सही gitem
रिकॉर्ड खोजने के लिए है।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।