2 Stimmen

Wähle zwei Zeilen in einem einzelnen SQL-Statement nur, wenn beide Bedingungen erfüllt sind.

Ich habe eine Tabelle mit den folgenden Daten.

Tabellenname: myTable

prodID   catNo   variable1  variable2
1        20      Cat        Blue
2        10      Cat        Rot
2        15      Cat        Grün
2        20      Cat        Schwarz
3        20      Cat        Gelb
4        10      Cat        Orange
4        15      Cat        Braun
4        20      Cat        Schwarz
5        30      Cat        Pink

Ich möchte alle Spalten aus meiner Tabelle auswählen, bei denen Folgendes zutrifft
"(prodID = 2 und catNo = 10) UND (prodID = 2 und catNo = 15)". Dies bedeutet, dass nur die beiden Zeilen zurückgegeben werden sollen, wenn beide Bedingungen erfüllt sind und es wird nichts zurückgegeben, wenn beide Zeilen nicht vorhanden sind. Also wird meine Ergebnistabelle so aussehen.

Tabellenname: results

prodID   catNo   variable1  variable2
2        10      Cat        Rot
2        15      Cat        Grün

Ich habe versucht, bedingte if-Anweisungen zu verwenden, aber ich kann sie nicht im SQL zum Laufen bringen. Meine aktuelle Lösung besteht darin, alle Zeilen mit prodID = 2 zurückzubekommen und dann mit PHP die if-Anweisung zu verwenden, um zu entscheiden, was angezeigt werden soll. Dies funktioniert jedoch nicht mit der paginierten Ergebnisanzeige, die ich entworfen habe, da mein Limit die Anzahl der Ergebnisse pro Seite verfälschen wird. Ich weiß, dass ich 'HAVING COUNT rows = 2' verwenden könnte, aber ich bin mir nicht sicher, wie ich es formulieren soll.

3voto

Wenn Sie nur Ergebnisse erhalten möchten, wenn Datensätze in catNo (10,15) gefunden werden, aber auch 0 Ergebnisse zurückgeben möchten, wenn Sie nach catNo in (10,12) gesucht haben

SELECT * FROM `myTable` 
WHERE (`prodID` = 2 AND `catNo` IN (10,15)) 
AND (SELECT COUNT(`catNo`) FROM `myTable` WHERE `prodID` = 2 AND `catNo` IN (10,15))>1;

Für drei CatNo's

SELECT * FROM `myTable` 
WHERE (`prodID` = 4 AND `catNo` IN (10,15,20)) 
AND (SELECT COUNT(`catNo`) FROM `myTable` WHERE `prodID` = 4 AND `catNo` IN (10,15,20))>2;

SQL Fiddle

2voto

M Khalid Junaid Punkte 61848

Um beide Kategorien für dasselbe Produkt abzugleichen, können Sie dies tun

select t.*
from table1 t
join (
select prodID
from table1
where catNo in (10,15)
and prodID = 2
group by prodID
having count(distinct catNo ) = 2
  ) t2
using(prodID)
where t.catNo in (10,15)

DEMO

1voto

Utkarsh Dixit Punkte 4255

Verwenden Sie die unten stehende SQL-Abfrage.

SELECT * FROM myTable where prodID = 2 and (catNo = 10 OR catNo = 15)

Ich hoffe, das hilft Ihnen.

1voto

Rohìt Jíndal Punkte 15250

Versuchen Sie es, es wird funktionieren :

SELECT * FROM `myTable` WHERE `prodID` = '2' AND `catNo` IN ('10','15')

0voto

R T Punkte 4089
 SELECT DISTINCT a.*,b.catNo,c.catNo FROM myTable AS a
 JOIN mytable AS b ON b.prodID=a.prodID
 JOIN mytable AS c ON c.prodID=a.prodID
 WHERE a.prodID=2 AND b.catNo=10
 AND c.catNo=15;

dies hat funktioniert. wirklich knifflige Situation ist dieses Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X