Wie mache Ich eine richtige subselect abfrage in mysql

...komplette Frage anzeigen

3 Antworten

Mache zunächst eine Abfrage für alle Lieferanten, die Artikel unter 20 € anbieten:

select LiefNr from tmp where AngPreis < 20

Wenn diese Abfrage funktioniert, benutzt Du diese als Subselect wie folgt:

select * from tblieferer where LiefNr not in (select LiefNr from tmp where AngPreis > 20)

Jetzt bekommst Du alle Lieferanten, die im Subselect nicht enthalten sind, also die nichts unter 20 € anbieten.

Wenn man Subselects verwendet, ist es sinnvoll, diese zunächst vorher einzeln zu testen und dann zusammenzusetzen. Im Falle eines Fehlers wird das Eingrenzen vereinfacht. Nicht vergessen: Den Subselect in Klammern zu setzen. Anmerkung: Der Subselect kann selbst einen Subselect enthalten. Auf diese Weise lassen sich mehrere Selects ineinander verschachteln.

Als Subselect:

select * 
from tbllieferer
where LiefNr IN (
    select LiefNr 
    from tmp 
    where AngPreis > 20         
)

Und als Join

select t1.*
from tbllieferer as t1 
right join tmp as t2 on LiefNr
where t2.AngPreis > 20

Listigerweise ist ein Join (fast) immer schneller als ein Subselect. Wann immer möglich solltest du also das Subselect zurückstellen. Da es aber - zumindest am Anfang - leichter les- und damit "schreibbar" ist, und du sicherlich keine Massendaten verwalten willst (dann würdest du auch nicht mehr MySQL verwenden), kannst du sicherlich mit Subselects anfangen.

Das müsste gehen

SELECT
 T2.*
FROM
  tmp T0
  INNER JOIN tblartikel T1 USING (ArtNr)
  INNER JOIN tbllieferer T2 USING (LiefNr)

WHERE
  AngPreis > 20

Was möchtest Du wissen?