2011-05-17 130 views
11

有誰能告訴我爲什麼以下不行?它抱怨兩個選擇之間的連接關鍵字附近有語法錯誤。加入兩條select語句

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

也許我在這裏採取了錯誤的做法。有什麼建議麼?

UPDATE: 這裏是我的指針後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

嗯所有的加盟看起來有點不必要.... – Neal 2011-05-17 19:15:36

+1

你能描述你想從這個查詢檢索什麼?可能有更有效的方法。 – 2011-05-17 19:19:29

回答

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

你應該仔細檢查你的答案,這正是OP在他的問題中發佈的內容。 – 2011-05-17 19:18:38

+3

@maple_shaft它可能是這樣看的,但我在'JOIN'子句後刪除了'SELECT * FROM'。 – RedFilter 2011-05-17 19:20:12

+0

,並做到了這一點。對不起,我的問題一開始並不清楚,但是當我添加更多細節時,你們發佈了答案,而這個答案竟然是做我想做的。 – Codrguy 2011-05-17 19:38:42

7

您應該使用UNION如果你想不同的結果集組合。請嘗試以下操作:

(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

語法錯誤 – 2017-04-18 13:16:16

3

這會做你想要什麼:

select * 
    from orders_products 
     INNER JOIN orders 
      ON orders_products.orders_id = orders.orders_id 
where products_id in (180, 181);