MSSQL选择不匹配条件的行

时间:2015-01-16 20:13:51

标签: sql-server select conditional-statements

我真的不确定如何说出这个问题 - 继续说明情况以及我要做的事情。我有一张这样的桌子:

ProductName    Version

Excel          1.0.1
Word           1.0.2
Adobe          2.0.4

此表的目的只是向我展示相关产品的最新版本。我想要做的是搜索另一个我有结构的表:

Hostname    ProductName    ProductVersion    .... Many other columns

Sample1     Excel          1.0.0
Sample2     Excel          1.0.1
Sample2     Adobe          2.0.4
etc...

我想从第一个表中获取产品名称/版本,并查看第二个表,查看除了最新版本软件之外的任何主机。产品名称在两个表之间略有不同,但ProductName类似于'%excel%'应该工作得很好。

我真的不知道从哪里开始 - 任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:1)

select table2.*
from table2 
, table1
where charindex(table1.ProductName, table2.ProductName) > 0
and table2.version != table1.version

版本字符串的charindex匹配是一个可能无效的hack。它取决于Table2中的ProductName是Table1中值的子字符串。 YMMV。

随着你的牌桌越来越大,这将会大幅放缓。

答案 1 :(得分:0)

反过来做。 对于第二个表中的每一行,检查第一个表中是否存在相同的产品和版本。

SELECT * 
FROM table2
WHERE NOT EXISTS (SELECT 1
                  FROM table1
                  WHERE table1.ProductName LIKE '%' + table2.ProductName + '%'
                        AND table1.version <> table2.ProductVersion)