sammy65
Goto Top

Problem mit einem SQL Statement

Hallo zusammen,

ich habe folgendes Problem mit einem SQL Select Befehl:


Ergebnis sollen alle Datensätze sein, die

1. In der Tabelle2 auf den Primärschlüssel (tabelle1.nr.1) vorkommen
2. Bei denen tabelle1.nr.7 nicht leer sein darf
3. Bei denne tabelle1.nr.8 leer sein muss
4. Die entweder in der gruppe "XX" mit der fix zugehörigen Branche "XX" und "XX"

sein sollen.


Dies soll nur für folgende Gruppen und deren zugehörige Branche gelten (Die Branchen sind fix den Gruppen zugerordnet und sollten nicht unabhängig voneinander gelten!)

Ich habe Kriterien, welche ich in den Befehl gerne einbauen möchte: Folgende Kriterien sollen im Statement berücksicht werden.

Gruppe 015 mit Branche 000
Gruppe 054 mit Branche 055,000
Gruppe 097 mit Branche 086
usw..


Hierzu habe ich schon folgende 2 Lösungsansätze probiert welche leider nicht das gewünschte Ergebnis lieferten:


Lösungsansatz 1:


select tabelle1.Nr.1,tabelle1.Nr.2,tabelle1.Nr.3, usw. from tabelle1

LEFT JOIN tabelle2 ON tabelle1.Nr.1 = Tabelle2.Nr.5

where Tabelle1.Nr.1 IN (select feld.Nr5 from Tabelle2)

and tabelle1.Nr.7 is not null

and tabelle1.Nr.8 is null

and (gruppe ='015' and branche ='000')
and (gruppe ='025' and branche IN('000','251','250','252','254','253'))
and (gruppe ='027' and branche ='086')
and (gruppe ='034' and branche ='086')
and (gruppe ='097' and branche ='086')
and (gruppe ='037' and branche='000')
and (gruppe ='050' and branche ='054')
and (gruppe ='054' and branche IN('055','000'))
and (gruppe ='062' and branche ='000')
and (gruppe ='074' and branche IN('000','065','067','068','069','070','071','072','073','074','075'))
and (gruppe ='076' and branche IN('000','067','068','069','070','071','072','073','074','075'))
and (gruppe ='075' and branche IN('000','751','752','753','754','755'))
and (gruppe ='080' and branche IN('280','281','081','082','036','000'))
and (gruppe ='088' and branche ='086')
and (gruppe ='091' and branche ='000')
and (gruppe ='281' and branche ='000')

and Tabelle2.Nr.9 ='INVOIC';


Lösungsansatz 2:


select tabelle1.Nr.1,tabelle1.Nr.2,tabelle1.Nr.3, usw. from tabelle1

LEFT JOIN tabelle2 ON tabelle1.Nr.1 = Tabelle2.Nr.5

where Tabelle1.Nr.1 IN (select feld.Nr5 from Tabelle2)

and tabelle1.Nr.7 is not null

and tabelle1.Nr.8 is null

and kunden.kundennr IN (select kundennr from kunden where gruppe ='015' and branche ='000')

and kunden.kundennr IN (select kundennr from kunden where gruppe ='025' and branche ='252')

.
.
.
and Tabelle2.Nr.9 ='INVOIC';

Content-Key: 272664

Url: https://administrator.de/contentid/272664

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: eisbein
eisbein 22.05.2015 um 11:16:34 Uhr
Goto Top
Mahlzeit!

4. Die entweder in der gruppe "XX" mit der fix zugehörigen Branche "XX" und "XX"

Die Glaskugel lässt vermuten, dass AND aber auch OR verwendet werden darf face-wink

Gruß
Eisbein
Mitglied: ukulele-7
Lösung ukulele-7 22.05.2015, aktualisiert am 26.05.2015 um 12:54:55 Uhr
Goto Top
Wenn du nur Werte aus Tabelle1 auswählst brauchst du nicht zwingend einen Join auf Tabelle2 machen. Du kannst einfach den Subselect nach IN um deine Bedingungen für Tabelle2 ergänzen:

WHERE Tabelle1.Spalte1 IN (SELECT Tabelle2.Spalte5 FROM Tabelle2 WHERE Tabelle2.Spalte9 = 'INVOIC' )

Jetzt weiß ich natürlich nicht wo deine Gruppen und Branchen herkommen da der Tabellenalias fehlt.

In Lösungsansatz 2 steht was von kunden.kundenr IN ( SELECT kundenr FROM kunden... Was in etwa wie prüfen auf 1=1 entspricht. Ich denke mal die Kundennr steht auch noch in einer der anderen Tabellen und die willst du prüfen.