Wydaje mi się, że możesz zrobić to samo w zapytaniu SQL, używając opcji NOT EXISTS, NOT IN lub LEFT JOIN WHERE IS NULL. Na przykład:
SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
Nie jestem pewien, czy cała składnia jest poprawna, ale są to ogólne techniki, które widziałem. Dlaczego miałbym wybrać jeden nad drugim? Czy wydajność się różni ...? Który z nich jest najszybszy / najbardziej wydajny? (Jeśli to zależy od implementacji, kiedy użyłbym każdego z nich?)
EXISTS
klauzuli. Możesz wrócić *
, NULL
czy cokolwiek innego: to wszystko być zoptymalizowane z dala.
SELECT
a FROM
. I *
jest po prostu łatwiejszy do wpisania. Tak, SQL
ma pewne podobieństwo do języka naturalnego, ale jest analizowany i wykonywany przez maszynę, zaprogramowaną maszynę. Nie chodzi o to, że kiedykolwiek włamie się nagle do twojego boksu i krzyknie „przestań żądać dodatkowych pól w EXISTS
zapytaniu, bo mam dość ich analizowania, a potem wyrzucania!”. Z komputerem jest OK, naprawdę.