Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wybrać wszystkie rekordy z jednej tabeli, które nie istnieją w innej tabeli?

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?

A :Koncepcyjnie wybieramy wszystkie wiersze z table1 a dla każdego wiersza próbujemy znaleźć wiersz w table2 z tą samą wartością dla name kolumna. Jeśli nie ma takiego wiersza, po prostu zostawiamy table2 część naszego wyniku jest pusta 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 kolumna (ta, o której jesteśmy pewni, że istnieje, z table1 ).

Chociaż może nie być to najwydajniejsza możliwa metoda we wszystkich przypadkach, powinna działać w zasadzie w każdym silniku bazy danych, który kiedykolwiek próbuje zaimplementować ANSI 92 SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wiodące i końcowe znaki w SQL Server

  2. Tworzenie wyzwalaczy audytu w SQL Server

  3. Konwencje nazewnictwa baz danych firmy Microsoft?

  4. Projekt bazy danych dla ustawień użytkownika

  5. Jak ustawienia języka mogą wpływać na wyniki FORMAT() w programie SQL Server (przykłady T-SQL)