Benutzer mit den meisten Antworten
Alle Datensätze einer Tabelle wenn in andere Tabele ein Eintrag besteht

Frage
-
Halloo zusammen,
ich habe irgendwie gerade Bretter vor dem Kopf und komme nicht auf den korrekten Select.
In einer Tabelle sind Maschinen-Typen aufgeführt, in der anderen Tabelle die Maschinen mit dem Maschinen-Typ. Jetzt möchte ich die Maschinen-Typen auflisten, für die keine entsprechenden Einträge von in der Tabelle der Maschinen existieren, also der Count = 0 ist.
Irgendwie komme ich nicht auf die Lösung und würde Euch bitten mir bitte auf die Sprünge zu helfen, wäre Euch echt dankbar dafür.
Viele Grüsse,
Maxi
Antworten
-
Hallo Maxi,
das kann man mit einer NOT IN Subselect Abfrage lösen oder mit einer NOT EXISTS Abfrage lösen.
Bei der NOT IN Abfrage muss man nur darauf achten, das das Subselect keine NULL Werte zurück liefert, sonst schlägt die Prüfung immer fehl. Beispiel:
SELECT *
FROM MaschinenTypen AS MT
WHERE NOT MachinenType_ID IN
(SELECT ID
FROM Machinen
WHERE NOT ID IS NULL)
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xi- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31
-
Hi,
da Du leider die Tabellenstruktur nicht gepostet hast, hier ein Beispiel:
SELECT TypId, TypName FROM MaschinenTypen WHERE TypId NOT IN ( SELECT DISTINCT MaschinenTyp FROM Maschinen )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31
-
hi,
du hast folgende drei Möglichkeiten:
Wichtig ist, das du dir immer den aktuellen Ausführungsplan und die IO-Statisitk ansiehst. In obigem Fall ist also die erste Möglichkeit zu bevorzugen.USE AdventureWorksLT ; SET STATISTICS IO ON; SELECT A.* FROM SalesLT.Address A LEFT OUTER JOIN SalesLT.SalesOrderHeader SOH ON SOH.ShipToAddressID = A.AddressID WHERE SOH.SalesOrderID IS NULL ; SELECT A.* FROM SalesLT.Address A WHERE NOT A.AddressID IN ( SELECT SOH.ShipToAddressID FROM SalesLT.SalesOrderHeader SOH ) ; SELECT A.* FROM SalesLT.Address A WHERE NOT EXISTS ( SELECT 1 FROM SalesLT.SalesOrderHeader SOH WHERE SOH.ShipToAddressID = A.AddressID ) ;
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31
Alle Antworten
-
Hallo Maxi,
das kann man mit einer NOT IN Subselect Abfrage lösen oder mit einer NOT EXISTS Abfrage lösen.
Bei der NOT IN Abfrage muss man nur darauf achten, das das Subselect keine NULL Werte zurück liefert, sonst schlägt die Prüfung immer fehl. Beispiel:
SELECT *
FROM MaschinenTypen AS MT
WHERE NOT MachinenType_ID IN
(SELECT ID
FROM Machinen
WHERE NOT ID IS NULL)
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xi- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31
-
Hi,
da Du leider die Tabellenstruktur nicht gepostet hast, hier ein Beispiel:
SELECT TypId, TypName FROM MaschinenTypen WHERE TypId NOT IN ( SELECT DISTINCT MaschinenTyp FROM Maschinen )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31
-
hi,
du hast folgende drei Möglichkeiten:
Wichtig ist, das du dir immer den aktuellen Ausführungsplan und die IO-Statisitk ansiehst. In obigem Fall ist also die erste Möglichkeit zu bevorzugen.USE AdventureWorksLT ; SET STATISTICS IO ON; SELECT A.* FROM SalesLT.Address A LEFT OUTER JOIN SalesLT.SalesOrderHeader SOH ON SOH.ShipToAddressID = A.AddressID WHERE SOH.SalesOrderID IS NULL ; SELECT A.* FROM SalesLT.Address A WHERE NOT A.AddressID IN ( SELECT SOH.ShipToAddressID FROM SalesLT.SalesOrderHeader SOH ) ; SELECT A.* FROM SalesLT.Address A WHERE NOT EXISTS ( SELECT 1 FROM SalesLT.SalesOrderHeader SOH WHERE SOH.ShipToAddressID = A.AddressID ) ;
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 28. April 2011 10:31