![]() |
Datenbank: mssql • Version: 2008 • Zugriff über: zeos
SQL Abfrage über zwei Tabellen
Hallo zusammen ,
ich hab mal wieder ein Problem was eine SQL-Abfrage angeht. Ich habe in der Abfrage zwei Tabellen verbunden bekomme aber nicht das Ergebnis was ich möchte. Tabelle1 hat die Spalten ID, Kunde, Nummer, Klasse, ... und Tabelle2 ID, Tabelle1ID, Status, Datum, ... Es kommt aber vor das in Tabelle2 nicht immer ein Eintrag für Tabelle1 existiert. Angezeigt haben möchte ich das Folgendermaßen. ID (Tabelle1) | Kunde | Nummer | Status (nur wenn in tabelle2 vorhanden ansonsten leer lassen) Jetzt zum Problem. Wenn kein passender Eintrag in Tabelle2 vorhanden ist wird einfach der nächste Wert vom Status genommen und reingeschrieben und alles verschiebt sich.
Code:
Wie Frage ich das ganze am besten ab, dass Stauts entsprechend leer gelassen wird? Steh nen bisschen aufm Schlauch.
SELECT Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1, Tabelle2
In Delphi lasse ich mir das ganze dann in einem ListView anzeigen.
Delphi-Quellcode:
TZQuery1.SQL.Text := 'SELECT Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1, Tabelle2';
TZQuery1.Active := true; TZQuery1.Open; while not TZQuery1.eof do begin ListItem := ListView.Items.Add; ListItem.Caption := TZQuery1.FieldByName('ID').AsString; ListItem.SubItems.Add(TZQuery1.FieldByName('Kunde').AsString); ListItem.SubItems.Add(TZQuery1.FieldByName('Nummer').AsString); ListItem.SubItems.Add(TZQuery1.FieldByName('Status').AsString); DataSet.Next; end; ... |
AW: SQL Abfrage über zwei Tabellen
SQL-Code:
SELECT
Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID |
AW: SQL Abfrage über zwei Tabellen
Vielen dank. So hab ich mir das vorgestellt. :)
|
AW: SQL Abfrage über zwei Tabellen
Keine Ursache. Allerdings stelle ich mir die Frage, wieso Du das Query erst auf Active setzt und dann zusätzlich noch Open aufrufst. Soll das so?
|
AW: SQL Abfrage über zwei Tabellen
Bin mir nicht sicher habe das aber glaube ich mal irgendwo in einem Beispiel Code oder so gesehen. Wie würde es den richtig aussehen?
Eine Frage habe ich jetzt noch zu der SQL-Abfrage was ein WHERE betrifft.
SQL-Code:
// Funktioniert
SELECT Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID WHERE Tabelle1.Kunde LIKE '%xyz%' // Funktioniert nicht SELECT Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID WHERE Tabelle2.Status LIKE '%1%' |
AW: SQL Abfrage über zwei Tabellen
Entweder Open oder Active auf true, alles andere ist doppelt gemoppelt. Zum Statement: was kommt denn hierbei heraus?
SQL-Code:
[edit] Andere Idee (evtl. meinst Du das):
SELECT
COUNT(*) FROM Tabelle2 WHERE Tabelle2.Status LIKE '%1%'
SQL-Code:
[/edit]
SELECT
Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID AND Tabelle2.Status LIKE '%1%' |
AW: SQL Abfrage über zwei Tabellen
Damit würden mir aber wieder die ganzen Sachen aus Tabelle1 im ListView fehlen oder?
--- Edit --- Das zweite hab ich übersehen. Probiere es mal aus. Danke. :) Mit
SQL-Code:
bekomme ich allle Einträge angezeigt, die keinen Eintrag in Tabelle2 haben.
SELECT
Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID AND Tabelle2.Status LIKE '%1%' |
AW: SQL Abfrage über zwei Tabellen
Anders gefragt: gibt es denn überhaupt Datensätze in Tabelle2, die eine 1 im Status-Feld enthalten und mit Tabelle1 verknüpft sind?
|
AW: SQL Abfrage über zwei Tabellen
Ja gibt es.
Habe Testweise die Tabellen folgendermaßen gefüllt. Zitat:
Sobald ich in einer Spalte in Tabelle2 suche gehts nicht. Bei WHERE Tabelle2.Status='%%' werden mir alle Spalten angezeigt die einen Eintrag im Status Feld haben. |
AW: SQL Abfrage über zwei Tabellen
Von welchem Typ ist denn Status?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz