tabela1 (identyfikator, nazwa)
tabela2 (identyfikator, nazwa)
Pytanie:
SELECT name
FROM table2
-- that are not in table1 already
źródło
tabela1 (identyfikator, nazwa)
tabela2 (identyfikator, nazwa)
Pytanie:
SELECT name
FROM table2
-- that are not in table1 already
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
P : Co się tutaj dzieje?
Odp . : Koncepcyjnie wybieramy wszystkie wiersze table1
i dla każdego wiersza próbujemy znaleźć wiersz table2
o tej samej wartości dla name
kolumny. Jeśli nie ma takiego wiersza, po prostu pozostawiamy table2
część naszego wyniku pustą dla tego wiersza. Następnie ograniczamy nasz wybór, wybierając tylko te wiersze w wyniku, w których pasujący wiersz nie istnieje. Na koniec ignorujemy wszystkie pola z naszego wyniku, z wyjątkiem name
kolumny (tej, z której jesteśmy pewni, że istnieje table1
).
Chociaż może nie być to najbardziej wydajna metoda we wszystkich przypadkach, powinna ona działać w zasadzie w każdym silniku bazy danych, który próbuje zaimplementować ANSI 92 SQL
Możesz albo
lub
Zobacz to pytanie, aby uzyskać 3 techniki umożliwiające osiągnięcie tego celu
źródło
Nie mam wystarczającej liczby punktów do powtórzenia drugiej odpowiedzi. Ale muszę się nie zgodzić z komentarzami do pierwszej odpowiedzi. Druga odpowiedź:
Czy FAR jest bardziej wydajny w praktyce. Nie wiem dlaczego, ale korzystam z rekordów powyżej 800 tys. I różnica jest ogromna, zważywszy na przewagę nad drugą odpowiedzią zamieszczoną powyżej. Tylko moje 0,02 $
źródło
Jest to czysta teoria mnogości, którą można osiągnąć za pomocą
minus
operacji.źródło
https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
źródło
Uważaj na pułapki. Jeśli pole
Name
wTable1
zawierać wartości null jesteś w niespodzianki. Lepsze jest:źródło
Oto, co działało dla mnie najlepiej.
Było to ponad dwa razy szybciej niż jakakolwiek inna metoda, którą wypróbowałem.
źródło
Możesz używać
EXCEPT
w mssql lubMINUS
w oracle, są one identyczne zgodnie z:http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/
źródło
To działa dla mnie ostro
źródło
Zobacz zapytanie:
Koncepcyjnie byłoby: Pobranie pasujących rekordów w podzapytaniu, a następnie w głównym zapytaniu pobranie rekordów, które nie znajdują się w podzapytaniu.
źródło
Zamierzam ponownie opublikować (ponieważ nie jestem jeszcze wystarczająco fajny, aby skomentować) w prawidłowej odpowiedzi ... na wypadek, gdyby ktokolwiek pomyślał, że trzeba to lepiej wyjaśnić.
I widziałem składnię w FROM wymagającą przecinków między nazwami tabel w mySQL, ale w sqlLite wydawało się, że wolała miejsce.
Najważniejsze jest to, że kiedy używasz złych nazw zmiennych, pozostawia pytania. Moje zmienne powinny mieć większy sens. I ktoś powinien wyjaśnić, dlaczego potrzebujemy przecinka, czy nie przecinka.
źródło
Jeśli chcesz wybrać konkretnego użytkownika
Jest
tent_npk
to klucz podstawowy użytkownikaźródło