Удаление с помощью join on code igniter MSSQL возвращает ошибку - PullRequest
0 голосов
/ 07 февраля 2019

Для удаления с объединением мы используем этот формат

DELETE t1,t2 FROM t1
        INNER JOIN
    t2 ON t2.ref = t1.id 
WHERE
    t1.id = 1;

из www.mysqltutorial.org / mysql-delete-join

Следуйте точному способу удаленияно когда я реализую в своей собственной версии, я получаю ошибку в запятой между двумя таблицами, которые будут удалены.

Вот что у меня есть:

image

На изображении выше видно мою реализацию и ошибку, которую я получаю.

Любая идея приветствуется

Update

Тот же формат stackoverflow.com/ вопросы / 16481379 / как-на-удаление-с помощью-внутрипартийной присоединиться к-с SQL-сервером

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

SQL Server позволяет DELETE только из одной таблицы в операторе DELETE.

В этом случае вы пытаетесь удалить записи из двух таблиц в одном операторе DELETE, который не являетсяразрешено.

Для вашего случая вы можете просто написать тот же запрос, как показано ниже.

DELETE FROM lngFileId 
WHERE lngId=5

DELETE FROM tbl_FileOrPath
WHERE lngFileId=5

Для более сложных сценариев вы можете попробовать выполнить следующее.

DECLARE @TABLE TABLE 
  ( 
     id INT 
  ) 

INSERT INTO @TABLE 
SELECT t1.ID 
FROM   t1       
WHERE  <YOUR_CONDITION>

DELETE T 
FROM   t1 T 
WHERE  EXISTS (SELECT 1 
               FROM   @TABLE T2 
               WHERE  T2.id = T.id) 

DELETE T 
FROM   t2 T 
WHERE  EXISTS (SELECT 1 
               FROM   @TABLE T2 
               WHERE  T2.id = T.ref) 

Другой сценарий может быть, когда у вас есть Foreign Key Отношения между таблицами с включенной ON DELETE CASCADE.В таких случаях вам нужно удалить только из родительской таблицы, записи дочерней таблицы будут автоматически удалены.

0 голосов
/ 07 февраля 2019

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

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

Также допускается удаление только одной таблицы.Удаление с более чем одной таблицей разрешено в MySQL, а не в MSSQL.Вы можете найти живую демонстрацию Здесь .

Ниже приведен запрос с примерами данных.

create table WorkRecord2 (EmployeeRun int, empWorkNo varchar(10))
create table Employee (EmployeeNo int, empWorkNo varchar(10), company int, createdDate datetime)

insert into WorkRecord2 Values (1, 'EMW101'),(2, 'EMW102'),(3, 'EMW103'),(4, 'EMW104'),(5, 'EMW105')
insert into Employee values(1, 'EMW101', 1, GETDATE()),(2, 'EMW103', 2, GETDATE())

Select * from WorkRecord2
Select * from Employee

-- This will delete with employeeRun 1 and empWorkNo EMW101
DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
  ON EmployeeRun=EmployeeNo
WHERE Company = 1 and Cast(createdDate as DATE) = Cast(GETDATE() as DATE)

Select * from WorkRecord2
Select * from Employee

Перед удалением данных таблицы, как показано ниже.

EmployeeRun empWorkNo
---------------------
1           EMW101
2           EMW102
3           EMW103
4           EMW104
5           EMW105

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

EmployeeRun empWorkNo
---------------------
2           EMW102
3           EMW103
4           EMW104
5           EMW105
...