27.08.2019, Vladimír Klaus, navštíveno 1754x
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