27. 8. 2019, Vladimír Klaus, navštíveno 1214x

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í... Tady je potíž především v tom, že nejde snadno přepsat SELECT na DELETE. Je nutné přidat hned za DELETE odkaz na danou tabulku, ze které se bude mazat. Zápis vypadá trochu divně, ale jinak to nejde...

-- základní select
SELECT * FROM UserProfile
INNER JOIN webpages_Membership
ON UserProfile.UserId=webpages_Membership.UserId
WHERE IsConfirmed='false'

-- odstranění
DELETE UserProfile 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