2016-08-02 6 views
1

Ich habe eine Tabelle wie im unteren Bild gezeigt, es ist eine abgespeckte Version der größeren Tabelle.Wie man sich überschneidende Produkte aus verschiedenen Kategorien erhält

enter image description here

Frage

Ich habe die Produkte in der Kategorie 9030 und 1993 zu erhalten, also in diesem Fall ist es 1 Reihe zeigen. Aber wenn ich unter Abfrage ausführen, gibt es null als Ergebnis.

SELECT * FROM catalog_category_product WHERE category_id = '1993' AND category_id = 9022

So erwartete Ausgabe 1 Reihe mit product_id 33839 wäre, ist es eine Möglichkeit, um die Ergebnisse zu schneiden.

Ich bin nicht sehr vertraut mit MySQL-Abfragen, bitte beraten.

+0

Gebrauch verwenden oder anstelle von und – 1000111

+0

category_id können nicht beide Werte gleichzeitig sein, verwenden Sie OR oder IN() –

+0

aber es gibt alle Produkte in diesen Kategorien, nicht geschnitten Ergebnis –

Antwort

2

Um zu erhalten schnitten Ergebnis:

NOT IN Verwendung:

SELECT 
C1.product_id 
FROM catalog_category C1 
WHERE C1.product_id IN 
(SELECT 
    C2.product_id 
FROM catalog_category C2 
WHERE C2.category_id = 9030 
) 
AND C1.category_id = 1993 

Mit INNER JOIN:

SELECT 
    C1.product_id 
FROM 
    catalog_category C1 
INNER JOIN catalog_category C2 ON C1.product_id = C2.product_id 
WHERE C1.category_id = 9030 
AND C2.category_id = 1993; 

Verwendung EXISTS:

SELECT 
C1.product_id 
FROM catalog_category C1 
WHERE EXISTS (
    SELECT 1 
    FROM catalog_category C2 
    WHERE C2.category_id = 1993 
    AND C1.product_id = C2.product_id 
) 
AND C1.category_id = 9030 
+1

Große Bemühungen upvoted –

+1

löste mein Problem, verwendete die zweite Methode .. akzeptierte die Antwort. –

+0

Gut zu hören, dass es das Problem gelöst hat – 1000111

1

Ein einzelner Wert nicht den Jahren 1993 und 9022 sein kann, kann es einer von ihnen nur

So könnte man

SELECT * FROM catalog_category_product 
WHERE category_id=1993 OR category_id=9022 

Oder noch besser

SELECT * FROM catalog_category_product 
WHERE category_id IN (1993, 9022) 
Verwandte Themen