Hi Ilja!
das distinct ist nicht zwingend notwendig in deinem falle, kanst es weglassen, wenn du mit einer unterabfrage arbeitest.
Ja. Gleich mehr dazu.
du benutzt in der unterbabfrage die gleiche tabelle wie in der oberen, wo sind den deine aliasnamen für die gleichnamigen tabellen ?
In der Unterabfrage wird ADRESSGRU genutzt, das Abfrageergebnis ist aber aus der Tabelle ADRESSEN.
Ich hab drei unterschiedliche Möglichkeiten für Abfragen erstellt:
SELECT *
FROM ADRESSEN
WHERE ADRESSEN.IDNR IN (
SELECT DISTINCT IDNR
FROM ADRESSEN
INNER JOIN ADRESSGRU ON
(ADRESSEN.IDNR = ADRESSGRU.ADR_ID) AND
GR_ID in (2,3 /* [...] */)
)
ORDER BY NAME1 ASC
SELECT *
FROM ADRESSEN
WHERE IDNR in (
SELECT ADR_ID
FROM ADRESSGRU
WHERE GR_ID in (2,3 /* [...] */)
)
ORDER BY NAME1 ASC
Diese Abfrage ist nach einem simplen Test am performantesten. Spricht etwas dagegen, mit der Unterabfrage zu arbeiten?
Kann man das noch weiter optimieren?
SELECT *
FROM ADRESSEN
WHERE ADRESSEN.IDNR IN (
SELECT IDNR
FROM ADRESSEN
INNER JOIN ADRESSGRU ON
(ADRESSEN.IDNR = ADRESSGRU.ADR_ID) AND
GR_ID in (2,3 /* [...] */)
GROUP BY IDNR
)
ORDER BY NAME1 ASC
MfG H☼psel
--
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)