分组多个 'AND x not like y' In SQL 语句

Grouping multiple 'AND x not like y' In SQL statement

我目前有一个 SQL 语句对我的程序来说太长了(我有我可以使用的最大字符数。我正在使用 sccm 报告)。问题是我的 SQL 语句如下所示:

Select distinct v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0, v_GS_ADD_REMOVE_PROGRAMS_64.Publisher0, v_GS_ADD_REMOVE_PROGRAMS_64.Version0
FROM v_GS_ADD_REMOVE_PROGRAMS_64 
JOIN  v_R_System ON v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID = v_R_System.ResourceID 
WHERE (v_R_System.Netbios_Name0 = @computername)

DisplayName0 NOT LIKE 'hpp%'
AND
DisplayName0 NOT LIKE 'Logitech SetPoint%'
AND
DisplayName0 NOT LIKE 'HP Document Manager%'
AND
DisplayName0 NOT LIKE 'HP Imaging Device Functions%'
AND
DisplayName0 NOT LIKE 'PyQt4 - PyQwt5%'

它持续了 20 页。如何最大限度地减少此请求包含的代码量?有没有办法将所有 displayName0 not like ??NOT IN(value1, value2, ...) 之类的东西分组?

如果你没有在你的模式中拖尾 % 就可以了,你可以将它替换为:

SELECT ... WHERE DisplayName0 NOT IN ('hpp','Logitech SetPoint','HP Document Manager',...)

它会以某种方式缩短它。

但在我看来,正确的解决方案是使用您需要过滤的所有名称创建 [temp] table,然后加入它。

您能否将这些值存储在单独的 table 中,然后像这样在您的查询中引用它?:

 SELECT DISTINCT v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0
    ,v_GS_ADD_REMOVE_PROGRAMS_64.Publisher0
    ,v_GS_ADD_REMOVE_PROGRAMS_64.Version0
FROM v_GS_ADD_REMOVE_PROGRAMS_64
JOIN v_R_System ON v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID = v_R_System.ResourceID
WHERE (v_R_System.Netbios_Name0 = @computername) DisplayName0 NOT IN (
        SELECT DisplayName0
        FROM < NewTableName >
        )