【问题标题】:Substract/Compare two table rows in a SQL database减去/比较 SQL 数据库中的两个表行
【发布时间】:2012-06-12 16:00:29
【问题描述】:

这是我的问题:
我有一个“机器”表,列的行看起来像这样,但更长:

Microsoft 应用程序错误报告

Microsoft 应用程序 错误报告

Microsoft Office Professional Plus 2010

Microsoft Office OneNote MUI(英文)2010
Microsoft Office InfoPath MUI(英文)2010

Microsoft Office Access MUI(英语)2010

Microsoft Office 共享 设置元数据 MUI(英语)2010

Microsoft Office Excel MUI (English) 2010

Microsoft Office 共享 64 位设置元数据 MUI(英文)2010

我有一个“例外”表,其中有一列的行是这样的:

Microsoft Office OneNote MUI(英文版)2010

Microsoft Office InfoPath MUI(英文)2010

我想做的只是将第一个表中存在的文本(而不是第二个表中的文本)放入第三个表中。

对不起,如果我不清楚,我的英语已经尽力了..提前谢谢。

编辑:这是我的行的外观。 Click

【问题讨论】:

  • 您是否有一个大文本字段,还是将它们作为单独的行存储在不同的行上?
  • 我有一个大文本字段(varchar(MAX)),我所有的软件都在一行中。
  • 异常是否在一行中?还是它们在不同的行上?
  • 在一行中,我对我的两张桌子都做了同样的事情。
  • 你有一个糟糕的数据库设计。您需要另外两个表,MachineSoftware 和 ExceptionSoftware。每个软件都有一行。

标签: sql database


【解决方案1】:

假设您想要 Machines 中的行(不包含 Exceptions 中的行),您可以像这样选择它们:

select *
from Machines
where columnName not in (select columnName from Exceptions)

然后您可以像这样使用 insert into 插入它们(假设 Machines 和 newTable 具有相同的列):

insert into newTableName
select *
from Machines
where columnName not in (select columnName from Exceptions)

如果它们有不同的列,您可以选择它们..


由于它们都在同一列和同一行中,因此您需要使用 like 检查它们是否存在,如果存在则使用 replace 删除所需的部分。

【讨论】:

  • 问题是我所有的软件都在一行中,就像我在第一篇文章编辑中提供的链接一样。无论如何它会起作用吗? ://
  • @PierrePellegrinoMilza 它不起作用。但是为什么你们都排成一排呢?
  • 这是因为我编写了一个 c# 程序,获取有关不同远程计算机(操作系统、CPU、Blah blah、安装的软件)的信息并将所有内容放在一个表中,所以操作系统在一个列中, CPU在另一个,安装的软件也都在同一列:/
  • 有可能,但很难。您需要使用like 来检查它是否存在,如果存在,请使用replace 将其删除。
  • 我会在网上看看如何使用“like”和“replace”,谢谢:)
【解决方案2】:

我想你想要的是:

select m.line
from (select distinct line
      from Machines m
     ) left outer join
     Exceptions e
     on m.line = e.line
where e.line is NULL

我将您的问题解释为 Machines 有很多行,其中包含一行文本。您希望 Machines 中的不同行不在 Exceptions 中。

【讨论】:

    【解决方案3】:

    我知道我的问题已经过时了,但由于我已经重做了整个程序,我找到了另一个答案,所以如果它可以帮助某人:

    for (i = 0; i < SplitMachine.Length; i++)
                {
                    for (j = 0; j < SplitExceptions.Length; j++)
                    {
                        if (string.Compare(SplitMachine[i],SplitExceptions[j]) == 0)
                        {
                            ListMachines.RemoveAt(i);
                        }
                    }
                }
    

    SplitMachine 是我的软件的字符串数组,StringExceptions 是我不想显示的软件的字符串数组,所以如果我的 SplitMachine 中的字符串与 SplitExceptions 中的字符串匹配,我会删除 SplitMachine 中的相关字符串。

    我希望它很清楚并且可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多