SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN
(Select user_id FROM dbo.vw_alerts WHERE alertID=1)
我試圖返回未讀取特定警報的檢查器列表,user_id是公共字段,該語句的邏輯似乎正常工作,但沒有結果回。儘管如果單獨運行,子查詢確實會返回結果。我哪裏錯了?選擇不在子查詢中的結果
SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN
(Select user_id FROM dbo.vw_alerts WHERE alertID=1)
我試圖返回未讀取特定警報的檢查器列表,user_id是公共字段,該語句的邏輯似乎正常工作,但沒有結果回。儘管如果單獨運行,子查詢確實會返回結果。我哪裏錯了?選擇不在子查詢中的結果
如果你想使用NOT IN
,那麼你應該只包括不空,因爲not in
處理值null
值是不同的:
SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN (Select user_id
FROM dbo.vw_alerts
WHERE alertID=1
AND user_id is not null)
+1尼斯文章 – 2013-02-28 11:19:27
非常感謝,簡單的解決方案,並增加我的理解,歡呼聲 – 2013-02-28 11:22:51
@DuncanCook歡迎你,這篇文章是一個很好的參考,它是由一個StackOverflow成員。 :) – Taryn 2013-02-28 11:23:47
但子查詢的結果是那些你不不想要。因此,如果子查詢返回所有用戶,那麼您的查詢將不會返回任何結果。你確定它應該返回行 - 有沒有響應警報的用戶。
是的,即使每個人都讀過警報,仍然有用戶(存檔,非活動等)沒有閱讀它,上面的答案解決了它。 – 2013-02-28 11:22:18
檢查您的數據,是否有任何檢查員實際上沒有閱讀特定警報? – 2013-02-28 11:16:54
我是一個親戚navb拉維,但不是那麼糟糕:D – 2013-02-28 12:48:51