Ich erstelle eine wirklich komplexe dynamische Sql, es muss eine Zeile pro Benutzer zurückgeben, aber jetzt muss ich gegen eine eins zu viele Tabelle verbinden. Ich mache eine äußere Verknüpfung, um sicherzustellen, dass ich mindestens eine Zeile zurückbekomme (und kann auf Null prüfen, um zu sehen, ob es Daten in dieser Tabelle gibt), aber ich muss sicherstellen, dass ich nur eine Zeile von diesem äußeren Verknüpfungsteil zurückbekomme, wenn es mehrere Zeilen in dieser zweiten Tabelle für diesen Benutzer gibt. Bis jetzt habe ich folgendes gefunden: (sybase)
SELECT a.user_id
FROM table1 a
,table2 b
WHERE a.user_id = b.user_id
AND a.sub_id = (
SELECT min(c.sub_id)
FROM table2 c
WHERE b.sub_id = c.sub_id
)
Die Unterabfrage findet den Mindestwert in der One-to-Many-Tabelle für diesen bestimmten Benutzer.
Dies funktioniert, aber ich fürchte, dass es unangenehm ist, korrelierte Unterabfragen zu machen, wenn Tabelle 1 und 2 sehr groß werden. Gibt es einen besseren Weg? Ich versuche, mir einen Weg auszudenken, um Joins dazu zu bringen, es zu tun, aber ich sehe es nicht. Auch "where rowcount=1" oder "top 1" hilft mir nicht weiter, denn ich versuche nicht, die obige Abfrage zu reparieren, sondern ich füge sie zu einer bereits komplexen Abfrage hinzu.