2011-05-17 29 views
11

क्या कोई मुझे बता सकता है कि निम्नलिखित क्यों काम नहीं करेंगे? यह दो चयनों के बीच शामिल कुंजी शब्द के पास एक वाक्यविन्यास त्रुटि की शिकायत करता है।दो चुनिंदा वक्तव्यों में शामिल होना

SELECT * 
FROM (select * from orders_products inner JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 181) 
as A 

join 

SELECT * 
FROM (select * from orders_products INNER JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 180) 
as B 

on A.orders_id=B.orders_id 

मूल रूप से मेरी पहली SELECT एक निश्चित उत्पाद के लिए सभी आदेश की जानकारी एक मेज से खींचती है और मात्रा दूसरे से आदेश दिया खींचती है और उन्हें एक साथ जुड़ जाता है। दूसरा SELECT अन्य उत्पाद के लिए एक ही चीज़ करता है।

अब, मैं

_______A_________   _______B_________
O_ID P_ID Q O_ID P_ID Q
1 180 3 1 181 11
2 180 9 2 181 6
3 180 5 3 181 3

एक और शामिल हो रहा


Q_ID P_ID1 Q1 P_ID2 Q2
1 180 3 181 11
2 180 9 181 6
3 180 5 181 3

प्राप्त करने के लिए हो सकता है कि मैं एक गलत दृष्टिकोण यहाँ ले रहा हूँ चाहते हैं का उपयोग कर और,। कोई सुझाव?

अद्यतन: यहाँ RedFilter द्वारा संकेत के बाद मेरे लिए क्या काम किया है:

(SELECT * 
FROM (
SELECT * FROM orders_products 
INNER JOIN orders ON orders_products.orders_id = orders.orders_id 
WHERE products_id =181) AS A 
LEFT JOIN (
SELECT * FROM orders_products 
INNER JOIN orders ON orders_products.orders_id = orders.orders_id 
WHERE products_id =180) AS B ON A.orders_id = B.orders_id 
) 
UNION (
SELECT * 
FROM (
SELECT * 
FROM orders_products 
INNER JOIN orders ON orders_products.orders_id = orders.orders_id 
WHERE products_id =181 
) AS C 
RIGHT JOIN (
SELECT * 
FROM orders_products 
INNER JOIN orders ON orders_products.orders_id = orders.orders_id 
WHERE products_id =180 
) AS D ON C.orders_id = D.orders_id 
) 
+3

ummm सब में शामिल होने के एक सा अनावश्यक .... लग रहा है – Neal

+1

आप का वर्णन कर सके तो आप इस क्वेरी से पुनः प्राप्त करना चाहते हैं? एक और अधिक प्रभावी तरीका हो सकता है। –

उत्तर

31

सुनिश्चित करें कि आप क्या करने की कोशिश कर रहे हैं, लेकिन आप दो का चयन खंड नहीं है।

SELECT * 
FROM (select * from orders_products inner JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 181) 
as A 

join 

(select * from orders_products INNER JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 180) 
as B 

on A.orders_id=B.orders_id 

अपडेट::

आप शायद कुछ इस तरह करने के लिए इसे कम कर सकता है:

select o.orders_id, op1.products_id, op1.quantity, op2.products_id, op2.quantity 
from orders o 
inner join orders_products op1 on o.orders_id = op1.orders_id 
inner join orders_products op2 on o.orders_id = op2.orders_id 
where op1.products_id = 180 
    and op2.products_id = 181 
+0

आपको अपने उत्तर को दोबारा जांचना चाहिए, ओपी ने अपने प्रश्न में क्या लिखा है। –

+3

@maple_shaft यह उस तरह से देख सकता है, लेकिन मैंने 'जॉइन' क्लॉज के बाद 'SELECT * से हटा दिया। – RedFilter

+0

और यह चाल है। खेद है कि मेरा सवाल पहले अस्पष्ट था, लेकिन जब मैं अधिक जानकारी जोड़ रहा था, तो आप लोगों ने जवाब पोस्ट किए और यह एक ऐसा करने के लिए निकला जो मैं चाहता हूं। – Codrguy

7

आप UNION का उपयोग करना चाहिए यदि आप अलग अलग resultsets संयोजित करना चाहते हैं के बजाय ऐसा करें। प्रयास करें निम्नलिखित:

(SELECT * 
FROM (select * from orders_products inner JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 181) 
as A) 
UNION 
(SELECT * 
FROM (select * from orders_products INNER JOIN orders ON orders_products.orders_id = orders.orders_id where products_id = 180) 
as B 
on A.orders_id=B.orders_id) 
+0

सिंटेक्स गलत दिखा रहा है –

3

यह तुम क्या चाहते हो जाएगा:

select * 
    from orders_products 
     INNER JOIN orders 
      ON orders_products.orders_id = orders.orders_id 
where products_id in (180, 181); 
संबंधित मुद्दे