2016-09-09 3 views
1

Ich versuche, nur Zeilen zu erhalten, die in beiden Jahreszeiten vorhanden sind. sowohl in der Saison haben die Produkte gleiche code Zum Beispiel in der Saison 2016 I 315 Produkte in products Tabelle habe und für 2017 nur 28 ArtikelFiltern der Zeilen von Abfrageergebnis

Die folgende Abfrage 315 + 28 Produkte liefert.

SELECT * 
FROM products P 
INNER JOIN Season S ON S.id = P.id_season 
WHERE P.active = 1 
AND S.season IN (2016, 2017) 
ORDER BY P.code 

, was ich brauche, ist die Abfrage von 2017 und 28 ab 2016 nur 28 Produkte, die den gleichen Code haben ab 2017 die Produkte liefern sollten.

+0

Kann Product.code innerhalb jedes Jahres dupliziert werden? – qxg

Antwort

3

Es sieht aus wie Kreuzung:

SELECT P.* 
FROM products P 
INNER JOIN Season S ON S.id = P.id_season 
WHERE P.active = 1 
AND S.season=2016 
INTERSECT 
SELECT P.* 
FROM products P 
INNER JOIN Season S ON S.id = P.id_season 
WHERE P.active = 1 
AND S.season=2017 
ORDER BY P.code 

Oder eine andere aproach. Suchen von Datensätzen von 2016 finden ab 2017 und Matchcodes:

SELECT * FROM 
(
    SELECT * 
    FROM products P 
    INNER JOIN Season S ON S.id = P.id_season 
    WHERE P.active = 1 
    AND S.season=2016 
) T1 
JOIN 
(
    SELECT * 
    FROM products P 
    INNER JOIN Season S ON S.id = P.id_season 
    WHERE P.active = 1 
    AND S.season=2017 
) T2 ON T1.Code=T2.Code 
ORDER BY T1.Code 
+0

Scheint teilweise zu arbeiten, wie ich die IDs am Ende benötigen, da die IDs sind nicht gleich auf Schnittpunkt wird kein Ergebnis liefern :( – user3733648

+0

Hinzugefügt einen anderen Ansatz. Stellen Sie sicher, dass Sie Tabellenstrukturen und Beispieldaten anhängen. Es ist viel einfacher –

+0

Vielen Dank Wirklich gute Idee – user3733648

1

Sie müssen ändern und Zustand:

SELECT * 
FROM products P 
INNER JOIN Season S ON S.id = P.id_season 
WHERE P.active = 1 
AND P.id_season IN (2016, 2017) 
ORDER BY P.code 
+0

Wie die Abfrage von OP - das funktioniert nicht. – jarlh

1
SELECT * 
FROM products P 
INNER JOIN Season S ON S.id = P.id_season 
WHERE P.active = 1 
AND S.season IN (2017) 
Union All 
SELECT * 
FROM products 
where active = 1 
AND Prod_id in (
    SELECT Prod_Id FROM products P INNER JOIN Season S ON S.id = P.id_season 
    WHERE P.active = 1 AND S.season IN (2017) 
) 

funktionierts?

Verwandte Themen