2016-07-15 58 views
0

我正在嘗試搜索數據庫,以查找已打開14天但未被調用的情況。我檢查單詞呼叫的步驟,並可以返回步驟(沒有單詞呼叫)。條件符合時如何返回沒有行

如果工作調用存在(而不是返回單詞調用不存在的單個步驟),我不想返回該情況。

SELECT 
    Support_Incident.Support_Incident_Code, 
    Support_Incident.Company_Name, 
    Support_Incident.Support_Incident_Name, 
    Support_Incident.Severity, 
    Support_Incident.MF_Status_Display, 
    Support_Incident.MF_Action_Owner_Display, 
    Support_Step.Description, 
    DATEDIFF(hh, Last_Updated, GETDATE()) AS 'Main' 
FROM 
    Support_Incident 
INNER JOIN Support_Step 
    ON Support_Incident.Support_Incident_Id = Support_Step.Support_Incident_Id 
    AND (Support_Step.Description NOT LIKE '%phone%' 
    AND Support_Step.Description NOT LIKE '%call%') 
INNER JOIN Employee 
    ON Employee.Employee_Id = Support_Incident.Owner_Id 
WHERE 
    (DATEDIFF(hh, Support_Incident.Display_Create_Date, GETDATE()) BETWEEN 336 AND 359 
AND Support_Incident.MF_Action_Owner_Display <> 'Update' 
AND Support_Incident.MF_Status_Display <> 'Closed' 
AND Support_Incident.MF_Status_Display <> 'Defect' 
AND Support_Incident.MF_Status_Display <> 'Enhancement' 
AND Employee.Rn_Descriptor = '::sName'); 
+0

是否使用的是DBMS:

試試這個? –

+0

這是一個直接向ODBC DSN執行Odbc命令的外部工具。不過,考慮到您可能會遇到某些問題,我只是嘗試在SQL Server 2012 Management Studio中執行它 - 同樣的結果 - 我得到了所有不包含該短語的步驟,如果其中一個步驟包含該短語,我不希望返回任何這些步驟。 – DannyD

回答

0

是否有一個原因,你有

(Support_Step.Description NOT LIKE '%電話%' AND Support_Step.Description NOT LIKE '%通話%')

加入聲明,而不是在你的where子句中?

SELECT 
    Inc.Support_Incident_Code, 
    Inc.Company_Name, 
    Inc.Support_Incident_Name, 
    Inc.Severity, 
    Inc.MF_Status_Display, 
    Inc.MF_Action_Owner_Display, 
    Step.[Description], 
    DATEDIFF(hh, Last_Updated, GetDate()) AS 'Main' 
FROM 
    Support_Incident AS Inc 
    INNER JOIN Support_Step AS Step ON Inc.Support_Incident_Id = Step.Support_Incident_Id 
    INNER JOIN Employee AS Emp ON Emp.Employee_Id = Inc.Owner_Id 
WHERE 
    (DATEDIFF(hh, Inc.Display_Create_Date, GetDate()) BETWEEN 336 AND 359 
    AND Inc.MF_Action_Owner_Display <> 'Update' 
    AND Inc.MF_Status_Display <> 'Closed' 
    AND Inc.MF_Status_Display <> 'Defect' 
    AND Inc.MF_Status_Display <> 'Enhancement'    
    AND Emp.Rn_Descriptor = '::sName' 
    AND step.[description] Not Like '%call%'); 
+0

Style-wise,一個很好的問題,但由於它是一個INNER JOIN,它實際上並不會對結果產生任何影響,因爲對於返回的所有行,ON子句中的條件必須爲真。 (如果它是一個外部的,即左或右加入,將有一個顯着的差異。) – IMSoP

+0

好的,所以最好使用類似的東西:「AND inc.support_incident_code not in(從步驟step. [description中選擇inc.support_incident_code ]像%call%)「在where子句中呢? – Kelewan

+0

感謝您的幫助 - 我的代碼現在看起來好多了! :)爲了回答你的問題,我只在加入時加入了它,因爲我正在玩弄我在這裏發現的在聯結中使用NOT EXISTS的想法,但它沒有幫助,正如你所說的,它沒有區別於結果。 – DannyD

相關問題