SQL-Abfrage mit Exist in Unterabfrage
Mahlzeit alle zusammen,
habe wieder mal eine Abfrage bei der ich im moment gerade nicht weiter komme.
Und zwar geht es darum das z.B. einer Tabelle (relac) verschiedene Arbeitsgänge hinterlegt sind. In einer zweiten Tabelle (relab) sind Ressourcenlisten in denen die Arbeitsgänge eingetragen sind. Ich brauch nun die Anzahl der Verwendungen aus den Ressourcenlistten (relab) welche in der Tabelle "relac" stehen.
Habe hierzu schon eine Abfrage geschrieben:
select ac.mnr as arbeitsgang,ac.ktxt as arbeitsgangktxt,ac.uschl as Schuessel,ac.epos as Zusatz,count(ab.agnr) as Verwendungen from relac ac, (select agnr from relab where agnr LIKE 'AG%') ab
where ac.mnr LIKE 'AG%'
and ab.agnr = ac.mnr
group by ac.mnr,ac.ktxt,ac.uschl,ac.epos
order by ac.mnr
Da ich unter der Where-Klausel die Bedingung "ab.agnr = ac.mnr" habe, gibt er mir natürlich nur die Arbeitsgänge aus, bei denen eine Verwendung in den Ressourcenlisten vorhanden ist. Da aber auch einige Arbeitsgänge noch nicht verwendet wurden und diese beim Zählen normalerweise einen NULL-Wert haben sollten, werden die Arbeitsgänge nicht mit angezeigt.
Ich weiß das es die Funktion exist gibt, mit der ich per Unterabfrage zusätzlich die Arbeitsgänge anzeigen lassen kann auch wenn diese bei den Verwendungen einen Nullwert haben.
Stehe im moment einfach nur auf dem Schlauch.
Im Endeffekt brauche ich eine Abfrage, welche auch die Arbeitsgänge anzeigt, die bei der Funktion count (siehe oben) einen Null-Wert zurückgibt.
Vielen Dank im Vorraus
MfG
Der_Lomi
habe wieder mal eine Abfrage bei der ich im moment gerade nicht weiter komme.
Und zwar geht es darum das z.B. einer Tabelle (relac) verschiedene Arbeitsgänge hinterlegt sind. In einer zweiten Tabelle (relab) sind Ressourcenlisten in denen die Arbeitsgänge eingetragen sind. Ich brauch nun die Anzahl der Verwendungen aus den Ressourcenlistten (relab) welche in der Tabelle "relac" stehen.
Habe hierzu schon eine Abfrage geschrieben:
select ac.mnr as arbeitsgang,ac.ktxt as arbeitsgangktxt,ac.uschl as Schuessel,ac.epos as Zusatz,count(ab.agnr) as Verwendungen from relac ac, (select agnr from relab where agnr LIKE 'AG%') ab
where ac.mnr LIKE 'AG%'
and ab.agnr = ac.mnr
group by ac.mnr,ac.ktxt,ac.uschl,ac.epos
order by ac.mnr
Da ich unter der Where-Klausel die Bedingung "ab.agnr = ac.mnr" habe, gibt er mir natürlich nur die Arbeitsgänge aus, bei denen eine Verwendung in den Ressourcenlisten vorhanden ist. Da aber auch einige Arbeitsgänge noch nicht verwendet wurden und diese beim Zählen normalerweise einen NULL-Wert haben sollten, werden die Arbeitsgänge nicht mit angezeigt.
Ich weiß das es die Funktion exist gibt, mit der ich per Unterabfrage zusätzlich die Arbeitsgänge anzeigen lassen kann auch wenn diese bei den Verwendungen einen Nullwert haben.
Stehe im moment einfach nur auf dem Schlauch.
Im Endeffekt brauche ich eine Abfrage, welche auch die Arbeitsgänge anzeigt, die bei der Funktion count (siehe oben) einen Null-Wert zurückgibt.
Vielen Dank im Vorraus
MfG
Der_Lomi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159171
Url: https://administrator.de/forum/sql-abfrage-mit-exist-in-unterabfrage-159171.html
Ausgedruckt am: 16.02.2025 um 19:02 Uhr
6 Kommentare
Neuester Kommentar
Moin DerLomi,
ergänzend zu den Vorpostern,
Für den LEFT JOIN wäre es egal, das können alle DBMSe.
Aber für die die Formulierung des "CASE WHEN THEN" und des "IS NULL/IsNull()" brauchen wir schon den konkreten Dialekt.
Grüße
Biber
ergänzend zu den Vorpostern,
Für den LEFT JOIN wäre es egal, das können alle DBMSe.
Aber für die die Formulierung des "CASE WHEN THEN" und des "IS NULL/IsNull()" brauchen wir schon den konkreten Dialekt.
Grüße
Biber
normalerweise einen NULL-Wert haben sollten
wie soll bitte in deiner Unterabfrage eine NULL Wert herrauskommen wenn Du da mit LIKE 'AG%' filterst ?SELECT
ac.`mnr` AS 'arbeitsgang',
ac.`ktxt` AS 'arbeitsgangktxt',
ac.`uschl` AS 'Schuessel',
ac.`epos` AS 'Zusatz',
COUNT(ab.`agnr`) as 'Verwendungen'
FROM `relac` ac LEFT JOIN `relab` ab ON (ab.`agnr` = ac.`mnr`)
WHERE ac.`mnr` LIKE 'AG%'
GROUP BY ac.`mnr` /* ... */
ORDER BY ac.`mnr`;