![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
Ich habe 2 Tabellen: Master und Detail, die über ein ID-Feld verknüpft sind. Ich möchte nun alle Master-Datensätze haben, zu denen es mindestens einen Detaildatensatz gibt, der im Feld Text das Wort %Test% enthält.
Ich habe dazu zunächst beide Tabelle mit einem Join über ID verbunden. Das hat dazu geführt, dass der selbe Master-Datensatz öfter im Ergebnis zurückgegeben wird, wenn er mehrere Detaildatensätze hat, die %Test% enthalten. Damit die Master-Datensätze nicht mehrfach im Ergebnis enthalten sind, habe ich das "group by" für alle meine 22! Felder hinzugefügt. Ist das richtig/schön so? Gibt es eine bessere/schnellere Möglichkeit? Hier der Code in kurzer Form:
Code:
select m.id, m.feld2, m.feld3, m.feld4 from Master m
join Detail d on m.id = d.id where d.text like '%Test%' group by 1,2,3,4 |
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
nur mal aus dem Kopf:
select * from Masterdata where ID in (Select distinct MasterID from Clientdata) |
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
Wenn keine Felder vom Detail im SELECT auftauchen oder diese Fedler alle pro Master-ID gleich sind (sollten sie hoffentlich), dann reicht auch ein SELECT DISTINCT am Anfanh, um die Mehrfachen zu eliminieren.
|
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
weitere Möglichkeit:
SQL-Code:
SELECT m.*
FROM Master m WHERE EXISTS (SELECT first 1 d.id FROM Detail d where (d.id = m.id) and (d.text like '%TEST%')) |
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
SQL-Code:
Gruß
select distinct m.id, m.feld2, m.feld3, m.feld4 from Master m
join Detail d on m.id = d.id where d.text like '%Test%' K-H |
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
Danke an alle, es klappt mit den vorgeschlagenen Lösungen. Jetzt habe ich einges zur Auswahl :-)
|
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
Zitat:
Daher ist die Lösung von p80286 meiner Meinung nach deutlich besser, weil hier der Optimierer ordentlich arbeiten kann. |
AW: Master-Datail-Join soll jeden Master-Datensatz nur ein mal anzeigen
Zitat:
Durch das "IN" LIKE (also %TEXT%) läuft es immer auf einen Full Scan der Detail - Tabelle hinaus. Ein Index bringt hier nichts. Im Gegenteil - durch ein exists kann pro master_id das Durchlaufen der Detail - Tabelle beim ersten Treffer abgebrochen werden. Dadurch kann das exists schneller sein - vor Allem dann, wenn der Text häufig vorkommt. Aber relevante Unterschiede kann man hier nicht erreichen. Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 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