Как удалить с использованием 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
Обновление и замена части строки
Удалить дублирующиеся строки, сохранив первую строку