Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Abfrage über zwei Tabellen (https://www.delphipraxis.net/168152-sql-abfrage-ueber-zwei-tabellen.html)

citybreaker 8. Mai 2012 12:27

AW: SQL Abfrage über zwei Tabellen
 
Status ist Varchar. 1 und 0 habe ich nur als Beispiel zum Testen genommen.

DeddyH 8. Mai 2012 12:30

AW: SQL Abfrage über zwei Tabellen
 
Anscheinend bin ich aktuell etwas vernagelt. Bekommst Du hiermit Datensätze angezeigt?
SQL-Code:
SELECT
  Tabelle1.ID, Tabelle1.Kunde, Tabelle1.Nummer, Tabelle2.Status
FROM
  Tabelle1
JOIN
  Tabelle2 ON Tabelle2.Tabelle1ID = Tabelle1.ID
WHERE
  Tabelle2.Status LIKE '%1%'

citybreaker 8. Mai 2012 12:50

AW: SQL Abfrage über zwei Tabellen
 
Dann bin ich ja zum Glück nicht der einzigste der vernagelt ist.

Damit bekomme ich keine Datensätze angezeigt. Benutze ich anstatt WHERE ein AND bekomme ich Datensätze angezeigt ohne Eintrag in Tabelle2 (1;a;100).

DeddyH 8. Mai 2012 13:01

AW: SQL Abfrage über zwei Tabellen
 
Das bedeutet aber doch eigentlich, dass es keine verknüpften Datensätze in Tabelle2 gibt, die eine 1 enthalten. Gleichzeitig hieße das aber, dass Du ohne die WHERE-Klausel keine Datensätze mit einer 1 irgendwo im Status-Feld sehen könntest. Falls doch, dann mache ich gerade eine riesigen Denkfehler.

angos 8. Mai 2012 13:16

AW: SQL Abfrage über zwei Tabellen
 
Zitat:

Zitat von DeddyH (Beitrag 1165319)
Das bedeutet aber doch eigentlich, dass es keine verknüpften Datensätze in Tabelle2 gibt, die eine 1 enthalten. Gleichzeitig hieße das aber, dass Du ohne die WHERE-Klausel keine Datensätze mit einer 1 irgendwo im Status-Feld sehen könntest. Falls doch, dann mache ich gerade eine riesigen Denkfehler.

Über diesen Stolperstein bin ich auch schon öfters gefallen ;)

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%'
WHERE NOT Tabelle2.Status IS NULL

DeddyH 8. Mai 2012 13:17

AW: SQL Abfrage über zwei Tabellen
 
Wozu einen OUTER JOIN, wenn man dann die NULLs wieder aussortiert?

angos 8. Mai 2012 13:22

AW: SQL Abfrage über zwei Tabellen
 
Stimmt eigentlich auch...aber dann ists doch mit einem INNER JOIN erledigt?!

EDIT: Hab das mal fix mit deinem SQL von oben probiert. Der bringt auf meinem MSSQL-Server wie erwartet folgendes Ergebnis:

2;b;200;1
3;c;300;1
6;xyz;600;1

madas 8. Mai 2012 13:41

AW: SQL Abfrage über zwei Tabellen
 
Bei mir geht es uneter Firebird 2.1 auch:

Code:
select
  t1.ID,
  t1.KUNDE,
  t1.NUMMER,
  t2.STATUS
from TABELLE1 t1
left join TABELLE2 t2 on (t2.TABELLE1_ID = t1.ID)
where (t2.STATUS like '1')
Ergebnis:

ID KUNDE NUMMER STATUS
2 b 200 1
3 c 300 1
6 xyz 600 1

DeddyH 8. Mai 2012 13:43

AW: SQL Abfrage über zwei Tabellen
 
Wenn ich den TE richtig verstanden habe, will er alle DS aus Tabelle1 haben zzgl. evtl. vorhandenen verknüpften aus Tabelle2, die irgendwo im Status-Feld eine 1 stehen haben.

madas 8. Mai 2012 13:59

AW: SQL Abfrage über zwei Tabellen
 
Zitat:

Zitat von DeddyH (Beitrag 1165331)
Wenn ich den TE richtig verstanden habe, will er alle DS aus Tabelle1 haben zzgl. evtl. vorhandenen verknüpften aus Tabelle2, die irgendwo im Status-Feld eine 1 stehen haben.

Code:
select
  t1.ID,
  t1.KUNDE,
  t1.NUMMER,
  t2.STATUS
from TABELLE1 t1
left join TABELLE2 t2 on (t2.TABELLE1_ID = t1.ID) and (t2.STATUS like '1')
Na dann macht er aus dem 'where' ein 'and' und schon hat er, was er will:

Ergebnis:

ID KUNDE NUMMER STATUS
1 a 100 <null>
2 b 200 1
3 c 300 1
4 d 400 <null>
5 e 500 <null>
6 xyz 600 1


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 Uhr.
Seite 2 von 3     12 3      

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