17

Как удалить с использованием INNER JOIN в SQL Server?

11

Я хочу удалить данные с использованием 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 ответ(ов)

30

Вам нужно указать, из какой таблицы вы удаляете записи. Вот пример с использованием псевдонима:

DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
  ON EmployeeRun = EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

Этот запрос удалит записи из таблицы WorkRecord2, где выполнены условия, указанные в операторе WHERE.

2

Для удаления записей из таблицы нужно указать её имя между DELETE и FROM. Это необходимо для того, чтобы определить, из какой таблицы вы хотите удалить записи. Также стоит убрать оператор ORDER BY, так как при удалении записей сортировка не имеет смысла.

Ваша финальная команда должна выглядеть так:

DELETE WorkRecord2 
FROM WorkRecord2 
INNER JOIN Employee 
    ON EmployeeRun = EmployeeNo
WHERE Company = '1' 
  AND Date = '2013-05-06';
0

Возможно, это будет полезно для вас:

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 ....
)
0

Попробуйте следующий SQL-запрос для удаления записей:

DELETE FROM WorkRecord2 
WHERE EmployeeRun IN (SELECT EmployeeNo FROM Employee 
                       WHERE Company = '1')
      AND Date = '2013-05-06';

Этот запрос удалит записи из таблицы WorkRecord2, где поля EmployeeRun соответствуют EmployeeNo из таблицы Employee для указанной компании и даты. Убедитесь, что указанные значения корректны, чтобы избежать удаления ненужных данных.

0

Вам нужно удалить записи из таблицы 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 лучше использовать одинарные кавычки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь