Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从应用于另一个表的条件中找到ID的SQL表中删除_Sql Server_Join_Sql Delete - Fatal编程技术网

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'