![]() |
Datenbank: MariaDB • Version: 10.1.23 • Zugriff über: MyDAC oder dbForge
Join funktioniert nicht
Hallo zusammen,
igentlich ist das ja auch ein reines Datenbankthema: Also, wenn's stört, einfach überlesen oder die Frage löschen. Ich habe einen Knoten im Hirn. Ich habe das schon dutzenende, hunderte Male gemacht, und sehe meinen Fehler nicht. MariaDB 10.1.23 Ich habe zwei einfache Tabellen, die über eine ID (Int) verbunden sind. Nun suche ich nach einer bestimmten Nummer im Feld (apid) der einen Tabelle, oder im Feld (id_extern) der anderen Tabelle. So funktioniert die Abfrage:
Code:
Wenn ich das Ganze aber über einen Join mache (das mache ich meistens, weil ich es verständlicher finde), dann läuft die Abfrage und bringt sowohl im Delphi, als auch in meinem Datenbank-Tool dbForge eine ewig dauernde Abfrage ohne Ergebnis.
SELECT
p.id FROM persons p, users u WHERE p.id = u.id_kdb AND ((u.id_extern = 33999) OR (p.apid = 33999))
Code:
Sieht jemand, was ich übersehe, oder woran könnte das liegen?
SELECT
p.id FROM persons p LEFT JOIN users u ON (p.id = u.id_kdb) WHERE (u.id_extern = 33999) OR (p.apid = 33999) Viele Grüße Harald |
AW: Join funktioniert nicht
SQL-Code:
SELECT
p.id FROM persons p WHERE p.apid = 33999 or p.id in ( select id_kdb from users where id_extern = 33999); |
AW: Join funktioniert nicht
Zitat:
Muss es wirklich Left Join sein? Also aus Person muss alles geliefert werden und wenn vorhanden auch Daten aus Users? (Dann wäre die erste Abfrage wohl falsch.) Left Join siehe hier: ![]() Mal hier bitte unten die Grafiken betrachten, dann sollte schnell klar werden, was konkret benötigt wird: ![]() Ausgehend von Deiner ersten Abfrage würde' ich mal das Left weglassen. |
AW: Join funktioniert nicht
Vielen herzlichen Dank für die Antworten!
Ja, es sind tatsächlich unterschiedliche Anfragen, was vor allem am INNER JOIN bzw. LEFT JOIN liegt, und den brauche ich tatsächlich :-( Es geht darum, alle mit der apid aus der einen Tabelle zu finden und auch noch solche, zu denen es eventuell in der zweiten Tabelle auch ein Datensatz vorkommt, was nicht unbedingt der gleich sein muss, aber kann. Es sind also folgende Kombinationen denkbar: p.apid = [gesuchter Wert oder irgendwas größer gleich 0, wenn u.id_extern gleich dem gesuchten Wert ist] u.id_extern = [irgendwas, gesuchter Wert oder NULL, oder u hat gar keinen passenden Datensatz = NULL bei LEFT JOIN] Seltsamerweise funktioniert der Join ganz ohne "Where", auch mit einer Bedingung, aber sobald ich die ODER-Suche einbaue, geht's ins Endlose... So also geht's, ich bekomme ca. 15000 Datensätze
Code:
Viele Grüße
SELECT
p.id FROM persons p LEFT JOIN users u ON (p.id = u.id_kdb) Harald |
AW: Join funktioniert nicht
Na da würde ich doch jeweils die Tabellen direkt auf die IDs filtern und die Einzelergebnise (left) joinen oder sogar outer joinen, wenn nötig bzw. möglich.
Falls einigermaßen passende Indizes vorliegen sollten die Einzelsuchen blitzschnell gehen und die dann wohl sehr kleine Ergebnismenge ganz easy (flott) zu joinen sein.
Code:
--pseudo
select * from (Select <Daten> from person where filter = Id) p (left|full outer) join (select <Daten> from users where filter = UId) u on p.id = u.id |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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