2016-09-09 7 views
2

Ich habe 2 Tabellen hier, STOCK (ID, CODE) und SALES (ID, CODE, STATUS). Ich möchte die Werte der STOCK-Tabelle filtern, indem Sie bestimmte Bedingungen aus der SALES-Tabelle verwenden.Filter mysql Tabelle basierend auf Werten aus einer anderen Tabelle

Ein Beispiel, wenn wir diese Werte in

STOCK Tabelle:

A1 
A2 
A3 
A4 
A5 

und in

SALES Tabelle:

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

Die Ergebnis sollte sein:

A4 
A5 

Was auch immer Elemente mit dem Status VERKAUFT und ZUGEORDNET sollten aus dem Ergebnis entfernt werden. Artikel mit Status RETURNED in der Tabelle SALES und Artikel, die noch nicht aus der Tabelle STOCK verwendet werden, sollten für die Eingabe verfügbar sein.

Ich habe versucht, den folgenden Code, aber das Problem ist, dass, sobald ein zurückgekehrter Artikel ist oder Assigned Verkauft mit Stand in Tabelle SALES erneut eingegeben, es ist immer noch in das Ergebnis zu bekommen.

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')); 

Bitte helfen Sie mir, dieses Problem zu lösen.

Antwort

2

Basierend auf Ihrem Zustand die folgende Abfrage Ihr erwartetes Ergebnis zurück:

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; 

finden Sie die LIVE DEMO für das gleiche mit den gegebenen Beispieldaten.

+0

Vielen Dank. Das ist das, was ich benötige. Vielen Dank. – Vishnu

+0

Hallo, ich wäre sehr dankbar, wenn Sie mir helfen könnten, dies in einem ** VIEW ** zu verwenden, da Unterabfrage in SELECT nicht erlaubt ist. – Vishnu

Verwandte Themen