У меня есть три таблицы - группы, концерты и правопреемникиКак удалить запись, учетные записи и записи внуков?
Таблица (который присваивает гиг для зарегистрированного пользователя, который вошел в него, чтобы создать много-много отношений между концертами и пользователями.):
Bands: bandID, bandname
Gigs: GigID, bandID, venue, date
Assigns: assignID, gigid, userid (which is then linked to the users table)
Функция на сайте - удалить группу, но затем она «О, прежде чем вы удалите группу, она удалит все эти концерты», тогда пользователь выбирает подтверждение и так далее.
Мне нужен запрос, который удаляет группу, а затем удаляет концерты, где gigs.bandID = bands.bandID, а затем удаляет назначения, где assigns.gigID = gigs.gigID.
Я разработал инструкцию SELECT, и это отображает запись, которую я хочу удалить из таблицы назначений, подав ей бандад.
SELECT assigns.*
FROM bands INNER JOIN
gigs ON bands.bandid = gigs.bandid INNER JOIN
gigsaccass ON gigs.gigid = gigsaccass.gigid AND bands.bandid = 91
Но как мне создать инструкцию DELETE?
Вы говорите о каскадном удалении По умолчанию каскадное удаление отключено на dbs, вам нужно установить каскадное удаление на эти внешние ключи, чтобы при удалении родительской записи они будут автоматически удалены. вам не нужно писать отдельные инструкции удаления для записей детей и внуков. – jae555
Операция удаления может влиять только на одну таблицу. Чтобы удалить из всех трех уровней без нарушения ограничений, вам необходимо (a) удалить из внуков, используя соединение из трех таблиц ('delete gc from grandchild as gc join child как c join parent как p'), (b) delete from children, используя соединение из двух таблиц ('delete c from child as c join parent as p'), затем (c) удалить из родителя. –
Я не возражаю против использования трех отдельных инструкций удаления, это просто запись инструкции delete с двумя внутренними соединениями для удаления записей из таблицы назначений, которая меня озадачила. Удаление записи с концертов и полос достаточно просто. –