我有表T1,列C1,C2和表T2,列C3,C4,C5。我想从T1中删除记录,其中C1 = C3 AND C2 = C4和C5 ='123'。什么将是我试过以下查询通过连接多列删除查询
DELETE FROM T1 WHERE (C1,C2) = SELECT (C3,C4) FROM T2 WHERE C5 = '123'
但这是行不通的。
我有表T1,列C1,C2和表T2,列C3,C4,C5。我想从T1中删除记录,其中C1 = C3 AND C2 = C4和C5 ='123'。什么将是我试过以下查询通过连接多列删除查询
DELETE FROM T1 WHERE (C1,C2) = SELECT (C3,C4) FROM T2 WHERE C5 = '123'
但这是行不通的。
SQL Server中没有WHERE (x,y) = (a,b)
语法,很抱歉。这是你如何执行删除,基于连接,无论多少列参与加入:
DELETE t1
FROM t1
INNER JOIN t2
ON t1.c1 = t2.c3
AND t1.c2 = t2.c4
WHERE t2.c5 = '123';
SQL Server支持一个额外的FROM子句DELETE语句。
DELETE FROM T1
FROM T1
INNER JOIN T2
ON T1.c1 = T2.c3
AND T1.c2 = T2.c4
WHERE c5 = '123';
可以使用exists
做到这一点:
DELETE FROM T1
WHERE exists (SELECT 1 FROM T2 WHERE C5 = '123' and t2.c3 = t1.c1 and t2.c4 = t1.c2))
一般情况下,使用exists
比使用in
使用子查询,因为空白可导致后者做奇怪的方式行为更好。