2014-11-25 5 views
1

У меня есть две таблицы: ProductOrder и ProductOrderStatusHistory.MySQL-фильтр на основе внутреннего соединения

Каждая запись ProductOrder имеет много статусных историй.

Каждая запись ProductOrderStatusHistory имеет статус и связан с продуктом.

Я прохожу через заказы продуктов, и я хочу игнорировать любые заказы, которые имеют определенный статус, присвоенный ему. Вот то, что я до сих пор:

SELECT po.id FROM product_order as po 
INNER JOIN product_order_status_history posh ON posh.product_order = po.id 
AND posh.order_status <> 5 

Моя проблема, я не знаю, как отфильтровать весь заказ продукта, когда я сталкиваюсь с особым статусом.

Например:

po  | posh status 
--------+------------ 
126024 | 11 
126024 | 5 
140582 | 6 
140582 | 10 

Если статус я хочу, чтобы игнорировать это 5, то порядок продукта 126024 не будет включен в результате запроса.

Любая помощь была бы принята с благодарностью!

ответ

0

Попробуйте NOT EXIST пункт:

SELECT po.id FROM product_order as po 
WHERE NOT EXISTS(
    SELECT 0 FROM product_order_status_history posh 
    WHERE posh.product_order = po.id 
    AND posh.order_status = 5 
) 

Ниже приводится версия, которая соединяет две таблицы, но пропускает весь продукт:

SELECT po.id FROM product_order as po 
INNER JOIN product_order_status_history posh ON posh.product_order = po.id 
WHERE NOT EXISTS(
     SELECT 0 FROM product_order_status_history posh1 
     WHERE posh1.product_order = po.id 
     AND posh1.order_status = 5 
    ) 
+0

Мой человек! Спасибо, это отлично! –

1

Попробуйте переместить условие состояния на запросы WHERE часть как

SELECT po.id FROM product_order as po INNER JOIN product_order_status_history posh ON posh.product_order = po.id WHERE posh.order_status <> 5

Это должно фильтровать результат запроса, присоединяемой таблицы собственности.

+0

Это не работает. Все, что он дает мне, это дубликат записи заказа товара для каждого статуса, который не является 5. Это то, что меня разочаровывает, это похоже на то, что сравнение должно происходить внутри соединения или внутри подзапроса. Просто не могу понять. –