Ich habe eine Abfrage geschrieben, um eine Tabelle anhand von Kriterien zu filtern, die in einer Mastertabelle gefunden werden, und dann Zeilen zu entfernen, die einer dritten Tabelle entsprechen. Ich führe die Abfrage in Access aus, deshalb kann ich MINUS nicht verwenden. Es funktioniert, aber ich fand, dass es doppelte Zeilen für einige, aber nicht alle der ausgewählten Datensätze zurückgibt. Ich habe es mit DISTINCT behoben, aber ich weiß nicht, warum es überhaupt Duplikate zurückgeben würde. Es ist eine ziemlich einfache Abfrage:Warum benötigt diese SQL-Abfrage DISTINCT?
select distinct sq.*
from
(select List_to_Check.*, Master_List.SELECTION_VAR
from List_to_Check
left join Master_List
on List_to_Check.SUB_ID = Master_List.SUB_ID
where Master_List.SELECTION_VAR = 'criteria'
) as sq
left join List_to_Exclude
on sq.SUB_ID = List_to_Exclude.SUB_ID
where List_to_Exclude.SUB_ID is null
;
Edit: Die Beziehungen zwischen allen drei Tabellen sind 1-zu-1 auf dem SUB_ID var. In Kombination mit einem LINKEN JOIN würde ich eine Zeile pro ID erwarten.
Es ist schwer zu sagen, ohne eine Beschreibung Ihrer Tabellen, Daten und die Beziehungen zwischen den Tabellen (1 zu 1, 1 zu N, etc.). – sstan
Wäre schwer zu sagen, ohne genaue Beispieltabellendaten zu haben. Im Allgemeinen wird distinct nicht benötigt und wird durch richtige "group by" -Anweisungen gelöst. – topshot
@ststan die Beziehungen zwischen allen drei Tabellen sind 1 zu 1 auf der SUB_ID var. Deshalb würde ich keine Duplikate erwarten. – Rominus