从SQL表中删除,其中从应用于另一个表的条件中找到ID

ali*_*ali 1 sql-server join sql-delete

首先,我不知道标题是否正确,但让我告诉你我想要什么,我会按照建议更正.所以,我有2个表:

  • 表格1
    • ID,subid,name
  • 表2
    • ID

我要的是删除任何元素从table2具有ID相等subidtable1,在这里table1.name等于指定的值.

如果我有这些元素 table1

ID    subid    name
1 ... 1 ...... name1  
2 ... 3 ...... name2  
3 ... 2 ...... name1  
4 ... 1 ...... name2  
Run Code Online (Sandbox Code Playgroud)

和这些行 table2

ID
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

table2当name = name1时,我想用ID = subid 删除那些元素,,这意味着元素1和2.

就像是:

DELETE FROM table2
WHERE  ID = (SELECT subid
             FROM   table1
             WHERE  NAME = "name1") 
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Mar*_*ith 6

你非常接近.

您只需要= ANY而不是=因为子查询可以返回多行SQL Fiddle.

DELETE 
FROM table2
WHERE  ID = ANY (SELECT t1.subid
                 FROM   table1 t1
                 WHERE  t1.name = 'name1') 
Run Code Online (Sandbox Code Playgroud)

虽然这更常用表达 IN

DELETE 
FROM table2
WHERE  ID IN (SELECT t1.subid
              FROM   table1 t1
              WHERE  t1.name = 'name1') 
Run Code Online (Sandbox Code Playgroud)

我对您发布的查询所做的其他一些更改......

  1. 我始终确保子查询中的列引用使用两个部件名称来避免不幸的意外.
  2. 您应该使用单引号来分隔字符串文字,以便它在默认QUOTED_IDENTIFIER设置下工作,并且不会被解释为引用一个名为的列name1.