删除代码点火器 MSSQL return 上的加入错误
Deleting With join on code igniter MSSQL return an error
要删除并加入我们使用这种格式
DELETE t1,t2 FROM t1
INNER JOIN
t2 ON t2.ref = t1.id
WHERE
t1.id = 1;
来自 www.mysqltutorial.org/mysql-delete-join
按照正确的方式删除,但是当我在自己的版本中实现时,我在要删除的两个表之间的逗号中出现错误。
这是我的:
在上图中看到我的实现和我得到的错误。
如有任何想法,我们将不胜感激
Update
格式相同whosebug.com/questions/16481379/how-to-delete-using-inner-join-with-sql-server
您需要为要删除的 table 设置别名,如下例所示,因为 w
用于 WorkRecord2
。当需要内部连接删除或更新语句时,它是必需的。
DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'
也只允许一个 table 删除。在 MySQL 中允许删除多个 table 而不是 MSSQL。您可以找到现场演示 Here.
下面是带有示例数据的查询。
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
删除前table数据如下图
EmployeeRun empWorkNo
---------------------
1 EMW101
2 EMW102
3 EMW103
4 EMW104
5 EMW105
delete with inner join后table数据如下图
EmployeeRun empWorkNo
---------------------
2 EMW102
3 EMW103
4 EMW104
5 EMW105
SQL 服务器只允许 DELETE
来自 DELETE
语句中的一个 table。
在这种情况下,您试图在单个 DELETE
语句中从两个 table 中删除记录,这是不允许的。
对于您的情况,您可以简单地编写如下相同的查询。
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)
另一种情况是当您在启用 ON DELETE CASCADE
的 table 之间建立 Foreign Key
关系时。对于这种情况,您只需从父 table 中删除,子 table 记录将自动删除。
要删除并加入我们使用这种格式
DELETE t1,t2 FROM t1
INNER JOIN
t2 ON t2.ref = t1.id
WHERE
t1.id = 1;
来自 www.mysqltutorial.org/mysql-delete-join
按照正确的方式删除,但是当我在自己的版本中实现时,我在要删除的两个表之间的逗号中出现错误。
这是我的:
在上图中看到我的实现和我得到的错误。
如有任何想法,我们将不胜感激
Update
格式相同whosebug.com/questions/16481379/how-to-delete-using-inner-join-with-sql-server
您需要为要删除的 table 设置别名,如下例所示,因为 w
用于 WorkRecord2
。当需要内部连接删除或更新语句时,它是必需的。
DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'
也只允许一个 table 删除。在 MySQL 中允许删除多个 table 而不是 MSSQL。您可以找到现场演示 Here.
下面是带有示例数据的查询。
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
删除前table数据如下图
EmployeeRun empWorkNo
---------------------
1 EMW101
2 EMW102
3 EMW103
4 EMW104
5 EMW105
delete with inner join后table数据如下图
EmployeeRun empWorkNo
---------------------
2 EMW102
3 EMW103
4 EMW104
5 EMW105
SQL 服务器只允许 DELETE
来自 DELETE
语句中的一个 table。
在这种情况下,您试图在单个 DELETE
语句中从两个 table 中删除记录,这是不允许的。
对于您的情况,您可以简单地编写如下相同的查询。
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)
另一种情况是当您在启用 ON DELETE CASCADE
的 table 之间建立 Foreign Key
关系时。对于这种情况,您只需从父 table 中删除,子 table 记录将自动删除。