Подтвердить что ты не робот

Объединение двух операторов 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
) 
4b9b3361

Ответ 1

Не уверен, что вы пытаетесь сделать, но у вас есть два предложения 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 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

Update:

Возможно, вы можете свести его к чему-то вроде этого:

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

Ответ 2

Вы должны использовать 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)

Ответ 3

Это сделает то, что вы хотите:

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