sql mehrfach join ergebnislos :(

Joined
Feb 2, 2007
Messages
4,344
Points
270
da habe ich mal wieder ein sql-problem, aber diesmal in ms access 2003.

der geklammerte join

(tblPrüfungen LEFT JOIN tblBemerkungsverzeichniszugehörigkeit ON tblPrüfungen.PrüfungsID=tblBemerkungsverzeichniszugehörigkeit.PrüfungsID)

alleine funzt und gibt auch zahlreiche PrüfungsIDs aus, welche ja dann für den anderen join in der on-klausel genutzt werden sollen. hier der code:

SQL:
SELECT DISTINCTROW
	tblRohrleitung.RohrleitungsID,
	tblRohrleitung.LeitungsNrneu,
	tblRohrleitung.Rohrleitungsbezeichnung,
	tblRohrleitung.Medium,
	tblRohrleitung.Von,
	tblRohrleitung.Werkstoff,
	tblRohrleitung.Nennweite,
	tblRohrleitung.Nenndruck,
	Format([tblRohrleitung.Nenndruck],"#,##0.00"" bar""") AS Nenndruckformatiert,
	tblRohrleitung.ZulBetriebsüberdruck,
	Format([tblRohrleitung.ZulBetriebsüberdruck],"#,##0.00"" bar""") AS ZulBetriebsüberdruckformatiert,
	tblRohrleitung.ZulBetriebstemperatur,
	Format([tblRohrleitung.ZulBetriebstemperatur],"#,##0.00"" °C""") AS ZulBetriebstemperaturformatiert,
	tblRohrleitung.Arbeitsdruck,
	Format([tblRohrleitung.Arbeitsdruck],"#,##0.00"" bar""") AS Arbeitsdruckformatiert, 
	tblRohrleitung.Arbeitstemperatur,
	Format([tblRohrleitung.Arbeitstemperatur],"#,##0.00"" °C""") AS Arbeitstemperaturformatiert,
	tblRohrleitung.VerordnungsID, tblRohrleitung.Dämmung,
	tblRohrleitung.Beheizung,
	tblRohrleitung.Erdverlegung,
	tblRohrleitung.AusserBetrieb,
	tblRohrleitung.Sicherheitsrelevant,
	tblRohrleitung.Baujahr,
	tblRohrleitung.DatumPrüfvInbetrieb,
	tblRohrleitung.MasterAnlage,
	tblRohrleitung.Nach,
	tblRohrleitung.Rohrbrückenverlauf,
	tblRohrleitung.Baustützenbelegung,
	Last(tblPrüfungen.DatumPrüf) AS LetzterWertvonDatumPrüf,
	Max(tblPrüfungen.Prüfart) AS MaxvonPrüfart,
	Last(tblPrüfungen.Revision) AS LetzterWertvonRevision,
	Last(tblPrüfungen.GefordertePunkte) AS LetzterWertvonGefordertePunkte,
	Last(tblPrüfungen.DatnPrüfung) AS LetzterWertvonDatnPrüfung,
	Last(tblPrüfungen.ArtnPrüf) AS LetzterWertvonArtnPrüf,
	Last(tblPrüfungen.VisMängelOffen) AS LetzterWertvonVisMängelOffen,
	Last(tblPrüfungen.Sofortmaßnahmen) AS LetzterWertvonSofortmaßnahmen,
	Last(tblPrüfungen.Eingabedatum) AS LetzterWertvonEingabedatum,
	tblRohrleitung.GMACAD,
	Last(tblPrüfungen.Schwachstellen) AS LetzterWertvonSchwachstellen,
	tblBemerkungsverzeichniszugehörigkeit.Rohrabschnitt,
	tblBemerkungsverzeichniszugehörigkeit.Prüfpunkt,
	tblBemerkungsverzeichniszugehörigkeit.BemerkungsNr,
	Last(tblBemerkungsverzeichniszugehörigkeit.Beanstandung) AS LetzterWertvonBeanstandung,
	tblBemerkungsverzeichniszugehörigkeit.Risikomatrix,
	tblBemerkungsverzeichniszugehörigkeit.behoben,
	tblBemerkungsverzeichniszugehörigkeit.behobenDatum,
	tblBemerkungsverzeichniszugehörigkeit.Beschreibung
FROM
	tblRohrleitung
LEFT JOIN
(
	tblPrüfungen
	LEFT JOIN
		tblBemerkungsverzeichniszugehörigkeit
		ON
			tblPrüfungen.PrüfungsID = tblBemerkungsverzeichniszugehörigkeit.PrüfungsID
)
	ON
		tblRohrleitung.RohrleitungsID = tblPrüfungen.RohrleitungsID
GROUP BY
	tblRohrleitung.RohrleitungsID,
	tblRohrleitung.LeitungsNrneu,
	tblRohrleitung.Rohrleitungsbezeichnung,
	tblRohrleitung.Medium,
	tblRohrleitung.Von,
	tblRohrleitung.Werkstoff,
	tblRohrleitung.Nennweite,
	tblRohrleitung.Nenndruck,
	tblRohrleitung.ZulBetriebsüberdruck,
	tblRohrleitung.ZulBetriebstemperatur,
	tblRohrleitung.Arbeitsdruck,
	tblRohrleitung.Arbeitstemperatur,
	tblRohrleitung.VerordnungsID,
	tblRohrleitung.Dämmung,
	tblRohrleitung.Beheizung,
	tblRohrleitung.Erdverlegung,
	tblRohrleitung.AusserBetrieb,
	tblRohrleitung.Sicherheitsrelevant,
	tblRohrleitung.Baujahr,
	tblRohrleitung.DatumPrüfvInbetrieb, tblRohrleitung.MasterAnlage,
	tblRohrleitung.Nach,
	tblRohrleitung.Rohrbrückenverlauf,
	tblRohrleitung.Baustützenbelegung, tblRohrleitung.GMACAD,
	tblBemerkungsverzeichniszugehörigkeit.Rohrabschnitt,
	tblBemerkungsverzeichniszugehörigkeit.Prüfpunkt,
	tblBemerkungsverzeichniszugehörigkeit.BemerkungsNr,
	tblBemerkungsverzeichniszugehörigkeit.Risikomatrix,
	tblBemerkungsverzeichniszugehörigkeit.behoben,
	tblBemerkungsverzeichniszugehörigkeit.behobenDatum,
	tblBemerkungsverzeichniszugehörigkeit.Beschreibung,
	tblBemerkungsverzeichniszugehörigkeit.Beanstandung
ORDER BY
	tblRohrleitung.LeitungsNrneu;

aber dann kommt die meldung "kein aktueller datensatz". wenn man auf die hilfe klickt kütt:
"Kein aktueller Datensatz. (Fehler 3021)
Dieser Fehler tritt auf, wenn eine der Find- oder Seek-Methoden nicht erfolgreich war, wenn das zugrundeliegende Recordset-Objekt keine Datensätze enthält oder wenn der Datensatz gelöscht wurde. Wechseln Sie zu einem anderen Datensatz, oder wählen Sie einen anderen Datensatz aus, und versuchen Sie dann, die Operation erneut durchzuführen. Wenn das Recordset-Objekt leer ist, können Sie nicht zu einem aktuellen Datensatz gehen. Überprüfen Sie die BOF- und EOF-Eigenschaften.
"
für mich klingt das eher so, als würden die da was von vba-code erzählen?! aber ich starte ja eigentlich nur die pure abfrage?! noch kurz zur erklärung: ich soll diese vorhandene db modifizieren, da der ursprüngliche entwickler spontan nicht mehr zur verfügung steht.
die ursprüngliche abfrage, welche auch funktioniert, sah so aus:
SQL:
SELECT DISTINCTROW
	tblRohrleitung.RohrleitungsID, 
	tblRohrleitung.LeitungsNrneu, 
	tblRohrleitung.Rohrleitungsbezeichnung, 
	tblRohrleitung.Medium, 
	tblRohrleitung.Von, 
	tblRohrleitung.Werkstoff, 
	tblRohrleitung.Nennweite, 
	tblRohrleitung.Nenndruck, 
	Format([tblRohrleitung.Nenndruck],"#,##0.00"" bar""") AS Nenndruckformatiert, 
	tblRohrleitung.ZulBetriebsüberdruck, 
	Format([tblRohrleitung.ZulBetriebsüberdruck],"#,##0.00"" bar""") AS ZulBetriebsüberdruckformatiert, 
	tblRohrleitung.ZulBetriebstemperatur, 
	Format([tblRohrleitung.ZulBetriebstemperatur],"#,##0.00"" °C""") AS ZulBetriebstemperaturformatiert, 
	tblRohrleitung.Arbeitsdruck, 
	Format([tblRohrleitung.Arbeitsdruck],"#,##0.00"" bar""") AS Arbeitsdruckformatiert, 
	tblRohrleitung.Arbeitstemperatur, 
	Format([tblRohrleitung.Arbeitstemperatur],"#,##0.00"" °C""") AS Arbeitstemperaturformatiert, 
	tblRohrleitung.VerordnungsID, 
	tblRohrleitung.Dämmung, 
	tblRohrleitung.Beheizung, 
	tblRohrleitung.Erdverlegung, 
	tblRohrleitung.AusserBetrieb, 
	tblRohrleitung.Sicherheitsrelevant, 
	tblRohrleitung.Baujahr, 
	tblRohrleitung.DatumPrüfvInbetrieb, 
	tblRohrleitung.MasterAnlage, 
	tblRohrleitung.Nach, 
	tblRohrleitung.Rohrbrückenverlauf, 
	tblRohrleitung.Baustützenbelegung, 
	Last(tblPrüfungen.DatumPrüf) AS LetzterWertvonDatumPrüf, 
	Max(tblPrüfungen.Prüfart) AS MaxvonPrüfart, 
	Last(tblPrüfungen.Revision) AS LetzterWertvonRevision, 
	Last(tblPrüfungen.GefordertePunkte) AS LetzterWertvonGefordertePunkte, 
	Last(tblPrüfungen.DatnPrüfung) AS LetzterWertvonDatnPrüfung, 
	Last(tblPrüfungen.ArtnPrüf) AS LetzterWertvonArtnPrüf, 
	Last(tblPrüfungen.VisMängelOffen) AS LetzterWertvonVisMängelOffen, 
	Last(tblPrüfungen.Sofortmaßnahmen) AS LetzterWertvonSofortmaßnahmen, 
	Last(tblPrüfungen.Eingabedatum) AS LetzterWertvonEingabedatum, 
	tblRohrleitung.GMACAD, 
	Last(tblPrüfungen.Schwachstellen) AS LetzterWertvonSchwachstellen
FROM
	tblRohrleitung
LEFT JOIN
	tblPrüfungen
	ON
		tblRohrleitung.RohrleitungsID = tblPrüfungen.RohrleitungsID
GROUP BY
	tblRohrleitung.RohrleitungsID, 
	tblRohrleitung.LeitungsNrneu, 
	tblRohrleitung.Rohrleitungsbezeichnung, 
	tblRohrleitung.Medium, 
	tblRohrleitung.Von, 
	tblRohrleitung.Werkstoff, 
	tblRohrleitung.Nennweite, 
	tblRohrleitung.Nenndruck, 
	tblRohrleitung.ZulBetriebsüberdruck, 
	tblRohrleitung.ZulBetriebstemperatur, 
	tblRohrleitung.Arbeitsdruck, 
	tblRohrleitung.Arbeitstemperatur, 
	tblRohrleitung.VerordnungsID, 
	tblRohrleitung.Dämmung, 
	tblRohrleitung.Beheizung, 
	tblRohrleitung.Erdverlegung, 
	tblRohrleitung.AusserBetrieb, 
	tblRohrleitung.Sicherheitsrelevant, 
	tblRohrleitung.Baujahr, 
	tblRohrleitung.DatumPrüfvInbetrieb, 
	tblRohrleitung.MasterAnlage, 
	tblRohrleitung.Nach, 
	tblRohrleitung.Rohrbrückenverlauf, 
	tblRohrleitung.Baustützenbelegung, 
	tblRohrleitung.GMACAD
ORDER BY
	tblRohrleitung.LeitungsNrneu;
irgendwie merkwürdig. :?
 
Last edited:
Ich würde dich bitten es nicht als Fließtext zu kopieren, sondern entsprechend lesbar zu formatieren. Ich habe es in deinem Eingansbeitrag einmal angepasst.

Für mich sieht
SQL:
LEFT JOIN
(
	tblPrüfungen
	LEFT JOIN
		tblBemerkungsverzeichniszugehörigkeit
		ON
			tblPrüfungen.PrüfungsID = tblBemerkungsverzeichniszugehörigkeit.PrüfungsID
)
	ON
		tblRohrleitung.RohrleitungsID = tblPrüfungen.RohrleitungsID
sehr merkwürdig aus.

Sicher, dass du nicht
SQL:
LEFT JOIN
	tblPrüfungen
	ON
		tblRohrleitung.RohrleitungsID = tblPrüfungen.RohrleitungsID
LEFT JOIN
	tblBemerkungsverzeichniszugehörigkeit
	ON
		tblPrüfungen.PrüfungsID = tblBemerkungsverzeichniszugehörigkeit.PrüfungsID
ausühren willst?
 
also dein ausdruck funktioniert nicht ohne klammern - so ginge es:
SQL:
FROM
(
	tblRohrleitung
	LEFT JOIN 
		tblPrüfungen
		ON
			tblRohrleitung.RohrleitungsID = tblPrüfungen.RohrleitungsID
)
LEFT JOIN
	tblBemerkungsverzeichniszugehörigkeit 
	ON
		tblPrüfungen.PrüfungsID = tblBemerkungsverzeichniszugehörigkeit.PrüfungsID
aber dann ist die ergebnismenge auch null :(
verbal ausgedrückt:
eine rohrleitung hat n prüfungen. eine prüfung hat n bemerkungen.
hm, im anhang gibts das vollständige beziehungsdiagramm.
 

Attachments

Back
Top Bottom