Как удалить с использованием INNER JOIN в SQL Server?
Я хочу удалить данные с использованием INNER JOIN
в SQL Server 2008.
Но я получаю следующую ошибку:
Msg 156, Level 15, State 1, Line 15
Некорректный синтаксис около ключевого слова 'INNER'.
Мой код:
DELETE
FROM WorkRecord2
INNER JOIN Employee
ON EmployeeRun=EmployeeNo
WHERE Company = '1'
AND Date = '2013-05-06'
Как правильно использовать INNER JOIN
для удаления данных в SQL Server 2008?
5 ответ(ов)
Вам нужно указать, из какой таблицы вы удаляете записи. Вот пример с использованием псевдонима:
DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
ON EmployeeRun = EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'
Этот запрос удалит записи из таблицы WorkRecord2
, где выполнены условия, указанные в операторе WHERE
.
Для удаления записей из таблицы нужно указать её имя между DELETE
и FROM
. Это необходимо для того, чтобы определить, из какой таблицы вы хотите удалить записи. Также стоит убрать оператор ORDER BY
, так как при удалении записей сортировка не имеет смысла.
Ваша финальная команда должна выглядеть так:
DELETE WorkRecord2
FROM WorkRecord2
INNER JOIN Employee
ON EmployeeRun = EmployeeNo
WHERE Company = '1'
AND Date = '2013-05-06';
Возможно, это будет полезно для вас:
DELETE FROM dbo.WorkRecord2
WHERE EmployeeRun IN (
SELECT e.EmployeeNo
FROM dbo.Employee e
WHERE ...
)
Или попробуйте следующее:
DELETE FROM dbo.WorkRecord2
WHERE EXISTS(
SELECT 1
FROM dbo.Employee e
WHERE EmployeeRun = e.EmployeeNo
AND ....
)
Попробуйте следующий SQL-запрос для удаления записей:
DELETE FROM WorkRecord2
WHERE EmployeeRun IN (SELECT EmployeeNo FROM Employee
WHERE Company = '1')
AND Date = '2013-05-06';
Этот запрос удалит записи из таблицы WorkRecord2
, где поля EmployeeRun
соответствуют EmployeeNo
из таблицы Employee
для указанной компании и даты. Убедитесь, что указанные значения корректны, чтобы избежать удаления ненужных данных.
Вам нужно удалить записи из таблицы zpost
, которые имеют соответствующие комментарии в таблице zcomment
. Для этого можно использовать следующую SQL-команду:
DELETE zpost
FROM zpost
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = 'first';
В этом запросе мы выполняем удаление из таблицы zpost
, соединяя её с таблицей zcomment
по полю zpostid
. Условие WHERE
позволяет удалить только те записи, которые имеют комментарий с текстом 'first'. Обратите внимание, что для строковых литералов в SQL лучше использовать одинарные кавычки.
В чем разница между JOIN и INNER JOIN?
Сброс начального значения идентификатора после удаления записей в SQL Server
Переименование столбца в SQL Server 2008
Как конкатенировать текст из нескольких строк в одну строку в SQL Server
"Вставка результатов хранимой процедуры в временную таблицу"