Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL] Von mehreren Tabellen selektieren: Reihen fehlen! (https://www.delphipraxis.net/111623-%5Bsql%5D-von-mehreren-tabellen-selektieren-reihen-fehlen.html)

Valle 6. Apr 2008 19:09

Datenbank: MySQL • Version: 5.0 • Zugriff über: PHPs MySQL Extension

[SQL] Von mehreren Tabellen selektieren: Reihen fehlen!
 
Hi DPler,

ich bin erst seit kurzer Zeit dabei, mir etwas mehr Erfahrung von SQL anzuarbeiten und etwas mehr als nur einfache SELECTs und UPDATEs zu benutzen. Ich bin nun leider auf ein Problemchen gestoßen, bei dem es mir schwer fällt danach zu Google'n oder die Manuals zu durchforsten. Ich habe momentan folgenden Query, der auch weitgehend funktioniert. (Das ist nicht der original-Query, sondern nur das gleiche Prinzip)

SQL-Code:
SELECT
  A.*,
  B.column AS my_column,
  C.foo AS bar
FROM
  table_one AS A,
  table_two AS B
  table_three AS C
WHERE
  B.column = A.another_column AND
  C.foobar = A.example
Das Problem ist nun, dass es seit kurzem keinen Eintrag mehr in table_three gibt, der auf table_one.example passt. Das ist auch richtig so, der Eintrag soll gelöscht sein. Allerdings werden Zeilen aus table_one, bei denen es keinen passenden Eintrag aus table_three gibt nicht mehr zurückgegeben. Das ist nicht so, wie ich es gerne hätte.

Ich hätte gerne auch diese Zeilen. Was jetzt in der per AS als "bar" benannte Spalte steht ist mir eigentlich ziemlich egal. Von mir aus soll ein leerer String drin sein oder NULL. Jedenfalls muss ich die Spalte von anderen unterscheiden können. Normalerweiße müsste ein String, der länger als 1 ist drin stehen. Alles andere kann ich ja dann unterscheiden.

Ich hoffe, ich habe das halbwegs gut erklärt und mir kann jemand helfen. Ich würde mich auch freuen, wenn jemand vielleicht dein ein oder anderen Artikel kennt, bei dem man etwas mehr über SQL lernen kann. (Joins usw.)

Mit freundlichen Grüßen,

Valle

mkinzler 6. Apr 2008 19:12

Re: [SQL] Von mehreren Tabellen selektieren: Reihen fehlen!
 
Du verwendest einen impliziten Join. Dieser ist immer ein inner join. Du benötigst einen left outer join.
SQL-Code:
SELECT
  A.*,
  B.column AS my_column,
  C.foo AS bar
FROM
  table_one A
    join table_two B on B.column = A.another_column
    left join table_three C on C.foobar = A.example;

Valle 6. Apr 2008 21:46

Re: [SQL] Von mehreren Tabellen selektieren: Reihen fehlen!
 
Zitat:

Zitat von mkinzler
Du verwendest einen impliziten Join. Dieser ist immer ein inner join. Du benötigst einen left outer join.
SQL-Code:
SELECT
  A.*,
  B.column AS my_column,
  C.foo AS bar
FROM
  table_one A
    join table_two B on B.column = A.another_column
    left join table_three C on C.foobar = A.example;

Hey danke, so hat es funktioniert!

Aber warum finde ich denn dazu eigentlich auf mysql.com nichts? Ist es irgendwie Allgemeinwissen, was der Unterschied zwischen den vielen verschiedenen Joins ist? Ich finde auch mit Google nichts lesenswertes und die Namen der Funktionen sind ja nun auch nicht gerade selbsterklärend.

Mit freundlichen Grüßen,

Valle

mkinzler 6. Apr 2008 22:00

Re: [SQL] Von mehreren Tabellen selektieren: Reihen fehlen!
 
Inner join: nur Datensätze die in beiden Tabellen existieren
left (outer) join: alle Datensätze der linken Tabelle
right (outer) join: alle Datensätze der rechten Seite
full outer join: alle Datensätze aus beiden Tabellen
cross join: jede Kombination der beiden Tabellen

DeddyH 7. Apr 2008 07:19

Re: [SQL] Von mehreren Tabellen selektieren: Reihen fehlen!
 
http://www.delphipraxis.net/internal...=868231#868231


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