Sql server 从应用于另一个表的条件中找到ID的SQL表中删除
首先,我不知道标题是否正确,但让我告诉你我想要什么,我会按照建议更正它。 因此,我有两张表:Sql server 从应用于另一个表的条件中找到ID的SQL表中删除,sql-server,join,sql-delete,Sql Server,Join,Sql Delete,首先,我不知道标题是否正确,但让我告诉你我想要什么,我会按照建议更正它。 因此,我有两张表: 表1 ID,subid,name 表2 身份证 我想从table2中删除ID等于table1中subid的任何元素,其中table1.name等于指定值 如果我在表1中有这些元素 ID subid name 1 ... 1 ...... name1 2 ... 3 ...... name2 3 ... 2 ...... name1 4 ... 1 ...... nam
- 表1
- ID,subid,name
- 表2
- 身份证
table2
中删除ID
等于table1
中subid
的任何元素,其中table1.name
等于指定值
如果我在表1中有这些元素
ID subid name
1 ... 1 ...... name1
2 ... 3 ...... name2
3 ... 2 ...... name1
4 ... 1 ...... name2
以及表2中的这些行
ID
1
2
3
4
我想删除表2中ID=subid的那些元素,当name=name1时,这意味着元素1和2
比如:
DELETE FROM table2
WHERE ID = (SELECT subid
FROM table1
WHERE NAME = "name1")
这可能吗?你很接近
您只需要而不是=
,因为子查询可以返回多行
虽然这更常用于在
DELETE
FROM table2
WHERE ID IN (SELECT t1.subid
FROM table1 t1
WHERE t1.name = 'name1')
我对您发布的查询做了一些其他更改
我始终确保子查询中的列引用使用两个部分名称来避免错误
您应该使用单引号来分隔字符串文字,以便它在默认设置下工作,并且不会被解释为引用名为name1
的列
您也可以使用连接来删除,因此非常有可能
您可以首先通过以下方式标识(要)删除的记录:
select t2.*
from table2 t2
inner join table1 t1 on t2.id = t1.subId
and t1.name = 'whatever'
然后执行删除操作,如下所示:
delete t2
from table2 t2
inner join table1 t1 on t2.id = t1.subId
and t1.name = 'whatever'
@eckes看到我的小提琴使用的语法,我用它来查看它的工作:@eckes确实如此,看看我贴的小提琴。这是有效的syntaxhm,double-from至少在oracle上不起作用,hm。您还可以使用MAX(t1.subid)来避免设置oeration。@eckes-这会改变语义。它只会删除ID=2的行,而不是(1,2)
ID中的
delete t2
from table2 t2
inner join table1 t1 on t2.id = t1.subId
and t1.name = 'whatever'