SQL Delete на основе условия в соединении
можно удалить записи на основе удовлетворенного условия с помощью запроса соединения?
например, у меня есть таблица ссылок, соединяющая 3 записи. Запрос, который у меня есть на данный момент, удаляет записи из этой таблицы, где один из идентификаторов не IN()
взорванный массив Php. Я понял, что запрос должен удалять записи только из этой таблицы, если идентификаторы не существуют в массиве, и они принадлежат к определенной другой таблице на основе ссылки на другую таблицу.
7 ответов
Мне нравится использовать предложения EXISTS для этого:
DELETE FROM TableA
WHERE
<<put your array condition here>>
AND NOT EXISTS
(SELECT 1 FROM TableB Where TableB.ID=TableA.ID)
для SQL Server, команда немного отличается:
DELETE FROM TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column
WHERE TableB.Column IS NULL
нет, это не опечатка, да, вы do нужно "из таблицы"два раза. По крайней мере, вам нужен второй (первый является необязательным). Следующее имеет то преимущество, что оно работает как для SQL Server, так и для MySQL:
DELETE TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column
WHERE TableB.Column IS NULL
вы можете использовать :
удалить на основе соединения:
DELETE A
FROM TableA AS A
LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId
WHERE B.Column IS NULL
Удаление С Подзапросом:
DELETE
FROM TableA AS A
Where
A.id not in ( Select B.TabaleAId From Tab;eB As B )
или
DELETE FROM TableA
WHERE Not EXISTS
(
SELECT *
FROM TableB As B
Where B.TableAId = TableA.Id
)
удалить с помощью табличных выражений:
With A
As
(
Select TableA.*
FROM TableA AS A
LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId
WHERE B.Column IS NULL
)
Delete From A
DELETE FROM TableA
LEFT OUTER JOIN TableB
WHERE TableB.Column IS NULL
удалит записи в tableA, которые не имеют соответствующей записи в TableB. Это то, что вам нужно?
DELETE FROM a
FROM TableA AS a LEFT OUTER JOIN TableB AS b
on a.CALENDAR_DATE = b.CALENDAR_DATE AND a.ID = b.ID
Where b.ID is null
вы можете сначала использовать инструкцию select и проверить свои записи, которые вы хотите удалить, а затем удалить инструкцию select и добавить Delete FROM tablename с вышеуказанным синтаксисом запроса.
delete from TableA
where id in
(
select id from TableA
except select id from TableB
)
что означает " удалить из таблицы, где id в таблице a, но не в таблице b)
в противном случае оператор Merge может помочь вам (при совпадении / не совпадении удалить и т. д) http://technet.microsoft.com/en-us/library/bb510625.aspx
самый простой способ удалить на основе join выглядит следующим образом: 1. Напишите запрос, используя инструкцию SELECT вместо инструкции DELETE
SELECT COLUMNS
FROM Table1
INNER JOIN Table2 ON Table1.YYY = Table2.XXX
2. Заменить столбцы SELECT на DELETE FROM TABLE
DELETE FROM Table1
FROM Table1
INNER JOIN Table2 ON Table1.YYY = Table2.XXX
обратите внимание, что нам нужно указать из двух, один для удаления части и один для соединения части.