Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Problem (https://www.delphipraxis.net/62045-sql-problem.html)

buyden 30. Jan 2006 10:51

Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos

SQL-Problem
 
Hi,
ich hab ein kleines SQL-Problem. Sicher ganz was lapidares wenn man sich auskennt:

Ich habe zwei Tabellen und möchte in einem DBGrid den inhalt der Tabelle "auftrag" sowie ein Feld der Tabelle "geraete" anzeigen.
In der Tabelle "auftrag" gibt es einen Fremdschlüssel zum Feld GeraeteID in der Tabelle "geraete". Jetzt ist es aber blöd, die ID aus der Gerätetabelle anzeigen zu lassen. Es soll also das Feld "geraete.kurz" im DBGrid dargestellt werden.

Ich hab das mit folgender Anweisung versucht:
SQL-Code:
SELECT * FROM auftrag,geraete WHERE auftrag.techniker =143;
Damit bekomme ich die Datensätze der Auftragstabelle so oft angezeigt wie ich Datensätze in der Gerätetabelle habe.

Wie geht das denn richtig?

Ich hab noch nicht all zu viel SQL-Erfahrung.

mjenke 30. Jan 2006 10:55

Re: SQL-Problem
 
Hi!

Versuche es mal mit einem DISTINCT

SQL-Code:
SELECT DISTINCT *...
:-)

marabu 30. Jan 2006 10:59

Re: SQL-Problem
 
Du musst das kartesische Produkt einschränken - etwa so:

SQL-Code:
SELECT * 
  FROM auftrag, geraete
  WHERE auftrag.geraete_id = geraete.id
  AND auftrag.techniker = 143;
Grüße vom marabu

buyden 30. Jan 2006 11:14

Re: SQL-Problem
 
@mjenke:
Das hat leider gar nix gebracht.

@marabu
Funktioniert im Prinzip schon mal, allerdings bekomme ich ja so einen Datensatz erst angezeigt wenn auch ich ihm eine Gerätenummer zugewiesen habe und das ist nicht immer der Fall.

marabu 30. Jan 2006 11:18

Re: SQL-Problem
 
Gut dass du das noch erwähnst - in diesem Fall brauchst du einen OUTER JOIN - so etwa:

SQL-Code:
SELECT *
  FROM auftrag
  LEFT OUTER JOIN geraete ON auftrag.geraete_id = geraete.id
  WHERE auftrag.techniker = 143;
marabu

buyden 30. Jan 2006 11:34

Re: SQL-Problem
 
PERFEKT!!

Genauso hab ich mir das vorgestellt.

Vielen Dank :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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