2016-09-09 2 views
2

У меня есть 2 таблицы здесь, STOCK (ID, CODE) и SALES (ID, CODE, STATUS). Я хочу отфильтровать значения таблицы STOCK, используя определенное условие из таблицы SALES.Фильтровать таблицу mysql на основе значений из другой таблицы

В качестве примера, если мы имеем эти значения в

STOCK Таблица:

A1 
A2 
A3 
A4 
A5 

и

ПРОДАЖ Таблица:

A1 - Sold 
A2 - Returned 
A3 - Assigned 
A2 - Sold 
A4 - Returned 

результат должен быть:

A4 
A5 

Какие-либо предметы, имеющие статус ПРОДАН и ASSIGNED должны быть удалены из результата. Элементы с статусом RETURNED, в таблице SALES и элементы, которые еще не используются из таблицы STOCK, должны быть доступны для входа.

Я попытался следующий код, но проблема в том, что, как только ВЕРНУЛСЯ элемент повторно вводится в таблицу SALES с состоянием Продан или Assigned, он по-прежнему получать в к результату.

SELECT t1.CODE 
FROM STOCK t1 
LEFT JOIN SALES t2 ON t2.CODE = t1.CODE 
WHERE (t2.CODE IS NULL OR (t2.STATUS <> 'Sold' AND t2.STATUS <> 'Assigned')); 

Пожалуйста, помогите мне решить эту проблему.

ответ

2

Основываясь на вашем состоянии следующий запрос вернуть ваш ожидаемый результат:

SELECT S1.CODE 
FROM STOCK S1 
LEFT JOIN ( 
     SELECT t1.CODE 
     FROM STOCK t1 
     JOIN SALES t2 ON t2.CODE = t1.CODE 
     WHERE t2.STATUS IN ('Sold', 'Assigned')) S2 ON S2.CODE = S1.CODE 
WHERE S2.CODE IS NULL; 

Пожалуйста, найдите LIVE DEMO для того же с данными выборочных данных.

+0

спасибо. Это то, что мне нужно. Большое спасибо. – Vishnu

+0

Привет, я был бы очень благодарен, если бы вы могли помочь мне использовать это в ** VIEW **, поскольку подзапрос не разрешен внутри SELECT. – Vishnu

Смежные вопросы