2014-11-16 2 views
2

У меня есть 3 таблицы: продукты, заказы и OrderLines (Order_ID, PRODUCT_ID).Получить все продукты, и положить продукт под конкретный заказ в первую

У меня есть запрос sql, который кажется почти невозможным в only one query.
Есть ли способ, чтобы иметь только один запрос:

  • Все продукты, но showning продукты под конкретный заказ в первой; , что означает: для order A: показать product1, product2 .. присутствует в orderA's orderLines сначала, чем following products (не заказано).

PS: Я знаю, что можно добиться этого с union из двух запросов, но было бы лучше, чтобы это было сделано в only one query.

ответ

4

Вы можете поместить подзапрос в пункт order by. В этом случае необходим подзапрос exists:

select p.* 
from products p 
order by (exists (select 1 
        from orderlines ol 
        where p.productid = ol.productid and o.orderid = ORDERA 
       ) 
     ) desc;