sql-server - 删除匹配所有值的特定行

标签 sql-server tsql sql-server-2012

说我有一张 table

SELECT * INTO MyTable FROM (
  VALUES ('col1_a', 'col2_a', 'col3_a', 'coln_a'),
         ('col1_b', 'col2_b', 'col3_b', 'coln_b'),
         ('col1_c', 'col2_c', 'col3_c', 'coln_c')
) t (col1, col2, col3, coln)

我只想删除与我指定的每一列值匹配的行(考虑行高度相似,只有一两列不同)

我当然可以写
DELETE MyTable WHERE col1='col1_a' AND col2='col2_a' AND col3='col3_a' AND coln='coln_a'
DELETE MyTable WHERE col1='col1_b' AND col2='col2_b' AND col3='col3_b' AND coln='coln_b'

但这太烦人了。我想知道是否可以通过简单地列出值来方便地编写它?我试过这个
DELETE MyTable FROM (
  VALUES ('col1_a', 'col2_a', 'col3_a', 'coln_a'),
         ('col1_b', 'col2_b', 'col3_b', 'coln_b')
) t (col1, col2, col3, coln)

但这只是删除了 MyTable 中的所有行,请帮忙。

最佳答案

您可以使用 INNER JOIN在您的 DELETE陈述:

DELETE t1
FROM MyTable t1
INNER JOIN (
    SELECT *
    FROM (VALUES 
        ('col1_a', 'col2_a', 'col3_a', 'coln_a'),
        ('col1_b', 'col2_b', 'col3_b', 'coln_b')
    )AS a(col1, col2, col3, coln)
) t2
    ON t2.col1 = t1.col1
    AND t2.col2 = t1.col2
    AND t2.col3 = t1.col3

正如 Frisbee 所评论的,您可以删除 SELECT * :
DELETE t1
FROM MyTable t1
INNER JOIN (
    VALUES 
        ('col1_a', 'col2_a', 'col3_a', 'coln_a'),
        ('col1_b', 'col2_b', 'col3_b', 'coln_b')    
) AS t2(col1, col2, col3, coln)
    ON t2.col1 = t1.col1
    AND t2.col2 = t1.col2
    AND t2.col3 = t1.col3

关于sql-server - 删除匹配所有值的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33227211/

相关文章:

sql - 一个列最多可以有多少个检查约束?

asp.net - 在SQL Server 2005中同时从多台计算机插入同一数据库中的记录时出现问题

sql-server - 查找日期范围中的空白 - SQL

sql-server - 从 SQL Server 中的 Excel 导入时有什么方法可以克服限制吗?

sql - 如何使用SQL和Gridview在gridview中显示学生出勤率

sql-server-2012 - 查找所有相关表

sql server查询将值添加到现有值

mysql - MySQL 的 IF() 函数的标准方法

sql-server - 关闭 SQL Server/T-SQL 中的日记功能

sql - 从数字序列动态创建范围