分组多个 '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 >
)
我目前有一个 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 >
)