MSSQL Select 行不符合条件

MSSQL Select rows not matching criteria

不太确定如何表达这个问题 - 这是情况和我正在尝试做的事情。我有一个 table 这样的:

ProductName    Version

Excel          1.0.1
Word           1.0.2
Adobe          2.0.4

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

Hostname    ProductName    ProductVersion    .... Many other columns

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

我想从第一个 table 中获取产品 names/versions,然后在第二个 table 中查找任何 运行 不是最新版本的主机的软件。两个 table 之间的产品名称会略有不同,但像“%excel%”这样的产品名称应该可以正常工作。

我真的不知道从哪里开始 - 任何帮助将不胜感激!

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

版本字符串的 charindex 匹配是一个 hack,可能行不通。这取决于 Table2 中的 ProductName 是 Table1 中值的子字符串。 YMMV.

随着您的表变大,速度会急剧下降。

反其道而行之。 对于第二个 table 中的每一行,检查第一个 table 中是否存在相同的产品和版本。

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