Witam posiadam w bazie danych dwie tabele "persons" i "domeins". Tabele są połączone ze sobą "id_person". Chciałbym jedną komendą usunąć wszystkie rekordy w tych dwóch tabelach które mają taki sam "id_person"
Wg mnie tablica in-memory, wpisać do niej id_person (ewentualnie id z obu tabel), po czym dwa razy delete
. i drop
tablicy.
Lub dodać do tablic pola NeedDelete
.
nie zauważyłem że jedna z tablic person
To zależy od silnika którgo uzywasz, w mysql możesz tak:
DELETE persons,domeins
FROM persons
INNER JOIN domeins on domeins.id_person=persons.id_person
W sql server sie nie da, mozna to wymusic przez ustawienie cascading deletes
Teraz mnie tknęło, praktycznie aby zrobić to jedną komendą możesz napisać 2 zapytania delete
opakować w procedurę i wykonać 1 komendą
Dla SQL Server
exec procedurausuwającaztabel
Klucz obcy "ON DELETE CASCADE" i usuwamy z nadrzednej... :)
inomi13 napisał(a):
Witam posiadam w bazie danych dwie tabele "persons" i "domeins". Tabele są połączone ze sobą "id_person". Chciałbym jedną komendą usunąć wszystkie rekordy w tych dwóch tabelach które mają taki sam "id_person"
Podaj jakieś uzasadnienie takiego działania.
Zarówno rozwiązanie @_13th_Dragon jak i @Panczo są nieczytelne a dodatkowo opakowanie tego w stored proc i wywołanie przez exec to dodatkowy narzut czasowy na wykonanie. Jedyne sensowne rozwiązanie to poprawne ustawienie klucza obcego i usunięcie rekordów z tabeli głównej. Jeśli jednak pole FK może być nullem to te rekordy nie zostaną usunięte.