sql >> Databáze >  >> RDS >> Sqlserver

Jak vybrat všechny záznamy z jedné tabulky, které neexistují v jiné tabulce?

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

O :Co se tady děje?

A :Koncepčně vybíráme všechny řádky z table1 a pro každý řádek se snažíme najít řádek v table2 se stejnou hodnotou pro name sloupec. Pokud takový řádek neexistuje, ponecháme pouze table2 část našeho výsledku je pro tento řádek prázdná. Poté omezíme náš výběr tím, že ve výsledku vybereme pouze ty řádky, kde odpovídající řádek neexistuje. Nakonec ignorujeme všechna pole z našeho výsledku kromě name sloupec (ten, o kterém jsme si jisti, že existuje, z table1 ).

I když to nemusí být nejvýkonnější možná metoda ve všech případech, měla by fungovat v podstatě v každém databázovém stroji, který se kdy pokouší implementovat ANSI 92 SQL



  1. Optimalizujte dotaz GROUP BY pro načtení nejnovějšího řádku na uživatele

  2. SQLite CROSS JOIN s praktickým příkladem

  3. 4 Předdefinované metody konverze dat SQL a případy použití

  4. Jak BIN() funguje v MariaDB