SQL - 如何在引用其他表时从一个表中删除?
如何从表A中删除两个字段A.P和A.C到表B的B.P和B.C,同时查找B.R = 1的所有匹配?SQL - 如何在引用其他表时从一个表中删除?
实际上既不以下的工作,但它应该进入的方向,不幸的是我无法弄清楚
DELETE FROM A WHERE (A.P = B.P AND A.C = B.C where B.C = 1)
DELETE FROM A WHERE (SELECT B.P, B.C FROM B WHERE B = 1)
DELETE
FROM A
WHERE EXISTS
(
SELECT NULL
FROM b
WHERE b.p = a.p
AND b.c = a.c
AND b.r = 1
)
@Quassnoi:我的查询不会更快吗? – Hogan 2010-01-22 17:11:17
不,它不会。在'SQL Server'(这是唯一的'RDBMS'你的查询将起作用),在未加索引的字段上'JOIN'效率低于'IN'或'EXISTS'。如果这些字段是唯一的或索引正确,那么'JOIN'将具有相同的效率。 http://explainextended.com/2009/06/16/in-vs-join-vs-exists/ – Quassnoi 2010-01-22 17:26:11
其实这一个完美的作品! 也与SQLite ... – mgmx 2010-01-23 01:26:45
DELETE FROM A
FROM A INNER JOIN B ON A.P = B.P AND A.C = B.C
WHERE B.C = 1
双FROM有时怎么...投人了。
不幸的是不能用于SQLite。 – mgmx 2010-01-23 01:33:49
DELETE FROM A WHERE A.Id IN
(SELECT A.Id FROM A INNER JOIN B ON A.P = B.P WHERE B.C = 1)
你要求删除从A 这有一个C值的所有记录=的C值表B中的行具有C = 1和相同的P值?
这与删除A中C值为1 [且表B中的P值相同]中的所有行相同。
所以试试这个:
Delete A
Where C = 1
And Exists
(Select * From B
Where C = 1
And P = A.P)
像这样的,你使用的是哪个`RDBMS`工作
DELETE FROM A
FROM A
INNER JOIN B ON A.P = B.P AND A.C = B.C AND B.R = 1
? – Quassnoi 2010-01-22 17:47:35
SQLite ........ – mgmx 2010-01-23 01:35:18