Odstraňování záznamů, když je třeba využít informace z další tabulky

27. 8. 2019, Vladimír Klaus, přečteno 174x

SQL
SQL Server

Občas potřebujete odstranit nějaké záznamy z hlavní tabulky, ale podmínka, která určuje, kterých záznamů se to týká, souvisí s další tabulkou. Zápis se může v různých databázích lehce lišit, případně je možné podmínku zapsat různými způsoby.

SQL Server

V tomto případě potřebuji smazat všechny uživatelské záznamy, pokud uživatel nepotvrdil členství...

SELECT * FROM UserProfile
INNER JOIN webpages_Membership
ON UserProfile.UserId=webpages_Membership.UserId
WHERE IsConfirmed='false'

SQL Server CE

Stejný požadavek, jen pro SQL Server CE, kdy se obejdeme bez INNER JOIN.

DELETE FROM webpages_Membership
WHERE UserId IN (
   SELECT UserId FROM UserProfile WHERE webpages_Membership.IsConfirmed='false' 
)

MS Access

Toto už je trochu jiný požadavek, ale v principu jde o stále stejnou situaci. Odstraňuji všechny objednávky, které nemají vyplněné ID zákazníka.

DELETE Objednavky.* FROM Objednavky
   LEFT JOIN Zakaznici ON Objednavky.IdZakaznika = Zakaznici.ID
   WHERE Zakaznici.ID IS NULL