Anmelden

View Full Version : SQL für Anfänger Teil x



KingofKning
17-12-17, 07:42
Hallo *all,
ich habe jetzt 2 Tage über das Problem gegrübelt, komme aber nicht auf die Lösung.

Ich möchte gerne alle Sätze aus Datei1 haben die ein Pendant in Datei2 haben.



select t01.adkto
from xadr01pf t01 where adkto in (select adkto
from mantay t02 where t01.adkto = t02.adkto)
and t01.adabkz = 0
order by t01.adkto



Jetzt hätte ich erwartet das ich jeden entsprechenden Satz einmal angezeigt bekomme.
Is aber nich.

Er zeigt mir die Sätze 2x an, obwohl adkto nur einmal in xadr01pf ist.
Klar kann ich ein distinct einbauen, abe ich verstehe nicht warum er es macht.

Kann mir jemand mal dieses Anfängerproblem erklären?!

GG 4549

andreaspr@aon.at
17-12-17, 09:06
Wenn du mit IN arbeitest, brauchst du diese Verknüpfung nicht.
Probier es mal so:

select t01.adkto
from xadr01pf t01 where adkto in (select t02.adkto
from mantay t02)
and t01.adabkz = 0
order by t01.adkto

lg Andreas

KingofKning
17-12-17, 09:38
Es war mal wieder der Klassiker,
vertraue keinen Daten die Du nicht selber erstellt hast. In der xadr01pf waren die Daten doch 2x drin.

Ich liebe es in fremden Daten zu wühlen....

B.Hauser
17-12-17, 09:50
Um jede ADKTO nur einmalig anzuzeigen, brauchst Du entweder einen DISTINCT oder GROUP BY.

Ich würde außerdem einen Sub-Select in den WHERE-Bedingungen vermeiden.
Stattdessen würde ich die Datei/Tabelle/View in der From-Anweisung angeben und mit der 1. Datei/Tabelle/View verknüpfen.

Etwa so:

select Distinct t01.adkto
from xadr01pf t01 join ManTay T02
on T01.ADKTO = T02.ADKTO
where t01.adabkz = 0
order by t01.adkto;


Birgitta

Fuerchau
17-12-17, 10:32
Wenn du keine Felder aus Datei2 benötigst reicht ebenso ein
select * from Dateia a
where exists (select * from dateib where a.key = b.key)

Es gibt halt viele Wege.