Join

Nabend!

Mit einem Hinweis zum Thread „Count“ will ich das Thema hier mal weiterführen. Das Problem mit dem JOIN habe ich gelöst, indem ich zwei Abfragen erstellt habe. Die erste Zählt alle AVIs auf den jeweiligen HDDs, und die 2. Abfrage verbindet das Ergebnis der 1. Abfrage mit der Tabelle der HDDs. Und dann erhalte ich auch NULL-Werte für HDDs, auf denen sich keine AVIs befinden. Das sieht so aus:

 SELECT [hdd].[Name], Count(\*) AS Anzahl\_AVIs
 FROM hdd, daten
 WHERE [hdd].[Name]=[daten].[hddname] And [daten].[Format])="AVI"
GROUP BY [hdd].[Name];


SELECT HDD.Name, Anzahl\_AVIs.Anzahl\_AVIs
 FROM HDD LEFT JOIN Anzahl\_AVIs ON HDD.Name = Anzahl\_AVIs.Name;

Nun Nochmal meine Fragen: Geht das auch in einer einzelnen Abfrage? Und warum klappt das hier nicht:

SELECT [HDD].[HDD\_Name], Count([Daten].[Art]) AS AVIs
FROM HDD LEFT JOIN Daten ON [HDD].[HDD\_Name]=[Daten].[HDD\_Name]
 AND Daten.Art="AVI"
GROUP BY [HDD].[HDD\_Name];

Bei diesem Ausdruck erhalte ich für Daten.Art=„AVI“ eine Fehlermeldung, „Verknüpfungsausdruck nciht unterstützt.“ Warum?

Nochmals vielen Dank für die Hilfe *zu Sancho guck* :smiley:

MfG
Rogge

Hi, Rogge!

SELECT [hdd].[Name], Count(*) AS Anzahl_AVIs
FROM hdd, daten
WHERE [hdd].[Name]=[daten].[hddname] And
[daten].[Format])=„AVI“
GROUP BY [hdd].[Name];

SELECT [HDD].[HDD_Name], Count([Daten].[Art]) AS AVIs
FROM HDD LEFT JOIN Daten ON
[HDD].[HDD_Name]=[Daten].[HDD_Name]
AND Daten.Art=„AVI“
GROUP BY [HDD].[HDD_Name];
Bei diesem Ausdruck erhalte ich für Daten.Art=„AVI“ eine
Fehlermeldung, „Verknüpfungsausdruck nciht unterstützt.“
Warum?

Weil Du oben auf Daten.Format zugreifst? Oder ist das gerade egal? Das sprang mit nur gerade ins Auge…

Weiterhin kommt in der ON-Bedingung die Verknüpfung auf die Felder der beteiligten Tabellen oder Abfragen. „AVI“ ist kein Feld, sondern eine Konstante. Die gehört in eine WHERE-Klausel. Also ungefähr:

x LEFT JOIN y ON x.Feld=y.AnderesFeld WHERE x.NochEinFeld=„AVI“

Gruß, Manfred