【问题标题】:SQL: Delete differences from table where multiple conditions must be metSQL:从必须满足多个条件的表中删除差异
【发布时间】:2017-05-03 22:00:38
【问题描述】:

示例表。下表没有主键(只有外键):

col1    col2    col3    col4
1       1         A       X
1       1         A       Y
1       1         B       Y
1       1         A       -
1       1         -       -
1       2         A       X
1       2         A       Y
1       2         B       -
1       2         A       -
1       2         -       -

现在有一个具有完全相同值的列表 - 但其中一个或多个缺失。 例如带有 1-1-A-Y 的行和带有 1-1-B-Y 的行

我不想说“从 .. 中删除 col1=1 和 col2=1 和 col3=A 和 col4=Y”等等。 如果这么简单,我就不会在这里问了。

它必须通过差异评估。

我尝试使用用户定义的表类型(表示数组),其中我保存所有应该保留的值,然后简单地调用delete from .. where [value] not in (select s from @my_array)

它适用于 ONE 列,但一旦有第二列,它(显然)就会失败。 为什么?因为在上面的例子中,第一列和第二列有相同的值,一旦相等,“不在”的陈述就是假的。

有人对如何完成此任务有建议吗?

【问题讨论】:

  • delete from table s where not exists(select * from @my_array a where s.col1 = a.col1 AND s.col2 = a.col2 AND s.col3 = a.col3 AND s.col4 = a.col4 呢?
  • 感谢您的建议,但问题是,如果它们不在数组中,那么所有其他行也会被删除。
  • 我以为你想删除所有不在数组中的行。所以你要删除一些不在数组中的行,哪些不删除?

标签: c# sql


【解决方案1】:

如果你使用 SQL Server 作为数据库,也许你可以使用 MERGE 语句。

它允许您根据两个不同来源(表、选择语句、...)的行之间的匹配或不匹配来执行一些操作

Here是微软官方文章。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我对您的描述和示例有点困惑,但我可以看到,如果它们有空单元格,您想删除行吗?

    这里是函数:

    public static void RemoveNullColumnFromDataTable(DataTable dt, string[] columnName)
    {
        for (int i = dt.Rows.Count - 1; i >= 0; i--)
        {
            foreach (string column in columnName)
            {
                if (dt.Rows[i][column] == DBNull.Value)
                {
                    dt.Rows[i].Delete();
                }
            }
        }
        dt.AcceptChanges();
    }
    

    所以你像这样运行它:

    string[] columnsToFilter = {"Col1", "Col2", "Col3", "Col4");
    staticClass.RemoveNullColumnFromDataTable(yourDataTable, columnsToFilter);
    

    【讨论】:

    • 如果他们有一个空单元格,则行完全消失了
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 2018-03-02
    • 1970-01-01
    • 2016-10-20
    • 2013-06-30
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多