![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDAC
Frage zu SQL Komma-Join
Hi,
SQL-Code:
Warum liefert WHERE hier komplett falsche Ergebnisse?
select n.*, c.* FROM notes as n, correspondence as c WHERE (n.recipient=22) or (c.contact_id=22)
Viele Grüße ... |
Re: Frage zu SQL Komma-Join
Weil das Eis zu kalt ist ;)
Ich nehme an, du willst die Tabellen zusammenfassen, sodass in allen Zeilen n.recipient = c.contact_id = 22 ist? Dann musst du das auch so hinschreiben ;) |
Re: Frage zu SQL Komma-Join
Hi,
nein ich will es so haben wie es da steht. Quasi das:
SQL-Code:
zusammen in einer Tabelle.
SELECT * FROM NOTES WHERE recipient=22
SELECT * FROM CORRESPONDENCE WHERE contact_id=22 Viele Grüße .... |
Re: Frage zu SQL Komma-Join
Untereinander? Dann musst du sicherstellen, dass beide irgendwie gleich benannte Spalten haben (oder das über Projektionen erzeugen) und die beiden Queries per UNION aneinaderkleben. Wenn du es nebeneinander willst, musst du die Tabellen FULL OUTER JOINen mit Bedingung False, dann funktionert es. Das Komma erzeugt ja gerade das Kartesische Produkt, also kriegst du mit der Abfrage oben auf der linken/rechten Seite jeweils mindestens ein Mal die komplette Tabelle.
|
Re: Frage zu SQL Komma-Join
So wie du es formuliert hast, wird aber jetzt jede Zeile der einen Tabelle mit jeder Zeile der anderen Tabelle in Beziehung gesetzt. Du musst noch zusätzlich eine Regel vorgeben, die eben dafür sorgt, dass nur die Zeilen miteinander verbunden werden, die auch etwas miteinander zutun haben. Welche Spalten der beiden Tabellen stehen denn in Beziehung zueinander?
Oder eben so...
SQL-Code:
oder gleich ordentlich...
select n.*, c.*
FROM notes as n, correspondence as c WHERE n.recipient = c.contact_id AND n.recipient = 22
SQL-Code:
select n.*, c.*
FROM notes as n INNER JOIN correspondence as c ON n.recipient = c.contact_id WHERE n.recipient = 22 |
Re: Frage zu SQL Komma-Join
Zitat:
|
Re: Frage zu SQL Komma-Join
Zitat:
Wie willst du die Zeilen zusammenführen? In Spaltenform...
SQL-Code:
In Zeilenform...
SELECT n.*, c.*
FROM notes n LEFT JOIN correspondence c ON c.contact_id = 22 WHERE n.recipient = 22
SQL-Code:
SELECT n.*, c.*
FROM correspondence c LEFT JOIN (SELECT FIRST 0 * FROM notes) n ON 1 = 1 WHERE c.contact_id = 22 UNION SELECT n.*, c.* FROM notes n LEFT JOIN (SELECT First 0 * FROM correspondence) c ON 1 = 1 WHERE n.recipient = 22 |
Re: Frage zu SQL Komma-Join
Hi omata,
Zitat:
Zitat:
|
Re: Frage zu SQL Komma-Join
Hallo,
an welche Stelle muss (kann) ich denn jetzt noch ein ORDER BY packen (in beiden Tabellen ist ein Datumsfeld wonach ich sortieren will)? Viele Grüße ... |
Re: Frage zu SQL Komma-Join
Das gesamte Ergebnis oder die einzelnen Teile?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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