AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Abfrage über zwei Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage über zwei Tabellen

Ein Thema von citybreaker · begonnen am 8. Mai 2012 · letzter Beitrag vom 8. Mai 2012
Antwort Antwort
Seite 1 von 3  1 23      
citybreaker
(Gast)

n/a Beiträge
 
#1

SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 10:34
Datenbank: mssql • Version: 2008 • Zugriff über: zeos
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:
SELECT Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status FROM Tabelle1, Tabelle2
Wie Frage ich das ganze am besten ab, dass Stauts entsprechend leer gelassen wird? Steh nen bisschen aufm Schlauch.

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;

...

Geändert von citybreaker ( 8. Mai 2012 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 10:42
SQL-Code:
SELECT
  Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status
FROM
  Tabelle1
LEFT JOIN
  Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#3

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 10:56
Vielen dank. So hab ich mir das vorgestellt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 10:59
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#5

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 11:52
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%'
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 11:56
Entweder Open oder Active auf true, alles andere ist doppelt gemoppelt. Zum Statement: was kommt denn hierbei heraus?
SQL-Code:
SELECT
  COUNT(*)
FROM
  Tabelle2
WHERE
  Tabelle2.Status LIKE '%1%'
[edit] Andere Idee (evtl. meinst Du das):
SQL-Code:
SELECT
  Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status
FROM
  Tabelle1
LEFT JOIN
  Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID
AND
  Tabelle2.Status LIKE '%1%'
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 8. Mai 2012 um 12:11 Uhr)
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#7

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 12:17
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:
SELECT
  Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status
FROM
  Tabelle1
LEFT JOIN
  Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID
AND
  Tabelle2.Status LIKE '%1%'
bekomme ich allle Einträge angezeigt, die keinen Eintrag in Tabelle2 haben.

Geändert von citybreaker ( 8. Mai 2012 um 12:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 13:12
Anders gefragt: gibt es denn überhaupt Datensätze in Tabelle2, die eine 1 im Status-Feld enthalten und mit Tabelle1 verknüpft sind?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#9

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 13:21
Ja gibt es.

Habe Testweise die Tabellen folgendermaßen gefüllt.
Zitat:
Tabelle1
ID, Kunde, Nummer
1;a;100 << hat keinen Eintrag in Tabelle2
2;b;200
3;c;300
4;d;400
5;e;500
6;xyz;600;

Tabelle2
ID, Tabelle1ID, Status
1;2;1
2;3;1
3;4;0
4;5;0
5;6;1
Wenn ich im WHERE Teil in einer Spalte aus Tabelle1 suche funktioniert alles wunderbar.
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: SQL Abfrage über zwei Tabellen

  Alt 8. Mai 2012, 13:23
Von welchem Typ ist denn Status?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz