Verschachtelung möglich?

Mulberry

Neuer Benutzer
Beiträge
2
Hallo zusammen,

auf meiner Suche nach einer Lösung meiner Frage bin ich auf dieses Forum gestoßen. Ich denke die ganzen Experten hier werden gleich Ungläubig den Kopf Schütteln über die vermutlich recht simple Frage.

Ich habe eine Tabelle mit folgenden Spalten:

id, expansionid, cardnumber

Aktuell mache ich nun folgendes (etwas mit pseudocode):

SELECT expansionid, count(*) FROM cards GROUP BY expansionid HAVING count(*) > 123 AND count(*) < 127;

Damit erhalte ich alle expansionid die mehr als 123 aber weniger als 127 mal in der Tabelle sind.

Foreach $id in $expansionid
Select id FROM cards WHERE expansionid = expansionid AND cardnumber = 98;
Next

In einem zweiten Schritt Frage ich dann, für jede expansionid welche die erste Abfrage zurück gegeben hat, in der selben Tabeller die id ab welche der cardnumber 98 entspricht.


Schön wäre es natürlich jetzt wenn das eine Abfrage (verschachtelt???) wäre. Geht das?

mfg und schonmal danke :)
 
Werbung:
Ja das geht:
select <felderDieDuBrauchst from
(<hier z.B. Dein Group By Statement rein>) einSelect
join
( <hier Dein For Each rein>) anderesSelect
on einSelect.<irgendeineID> = anderesSelect.<irgendeineID>
 
Danke für deine Antwort :).

Gerade bin ich auch selbst noch auf eine Lösung gekommen:

Select * FROM cards WHERE cardnumber = 98 AND expansionid IN (SELECT expansionid FROM cards GROUP BY expansionid HAVING count(*) > 123 AND count(*) < 127);

Welche Weg ist denn der bessere?
 
Werbung:
Ich würde sagen
where in () ist gedacht für eine Handvoll Werte.
Ein Join ist der Weg für größere Mengen.

Was bei Dir schneller läuft, kannst Du mit
Code:
explain <select statement>
die DB fragen.
Kommt auch drauf an, wieviel Daten vorhanden sind, wieviel Daten durchs Group By laufen, wie wenig Daten nach Group By übrig bleiben usw.

Ach und Du hast ja nach Verschachtelung gefragt. Das wäre eigentlich eher so:
select <felder> from
(group by select statement) g
where cardnumber=98

Ich gehe mal davon aus, Du hast einen Grund, warum Du die Cardnumber nicht schon beim Group By filterst.
 
Zurück
Oben