2015-11-19 36 views
3

我目前有一個SQL語句對於我的程序來說太長了(我有一個可以使用的最大字符數,我正在使用sccm報告)。問題是我的SQL語句看起來像這樣:分組多重'AND x不像y'在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, ...)

回答

1

如果你沒有在你的圖案尾礦%OK,你可以將其替換爲:

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

這將使得它在某種程度上更短。

但在我看來,正確的解決方案是創建[temp]表,並且需要過濾所有名稱,然後加入它。

+0

謝謝! –

1

你能存儲在單獨的表中的值,然後引用它在你這樣的查詢使用臨時表解決我的問題?:

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> 
     )