簡體   English   中英

為什么這個 WHERE 子句不適用於 Join?

[英]Why is this WHERE clause not working with Join?

我對 SQL 很陌生,這是一個相當復雜的命令:

SELECT users.name, 
       from_unixtime(activity.time_stamp, "%D %b %Y  %l:%i:%S"), 
      activity.activity, 
      activity.rfid_tag, 
      chemicals.description 
FROM activity 
JOIN chemicals ON chemicals.bar_code = activity.bar_code 
JOIN users ON users.badge_number=activity.badge_number 
WHERE  (activity="login") 
    OR (activity="logout") 
   OR (activity LIKE "Admin:%") 
   OR (activity="tag") 
   OR (activity="untag") 
   OR (activity LIKE "check out%") 
   OR (activity LIKE "pour%") 
   OR (activity="check out (unscheduled)") 
   OR (activity="not poured after checking out") 
   OR (activity LIKE "invalid:%") 
ORDER BY time_stamp DESC

當我運行它,它返回匹配的最后一個WHERE(從723 867)的或該行。 例如,我沒有看到活動="登錄"的任何行,但是SELECT * FROM activity WHERE activity="login"確實返回了一些行。

我究竟做錯了什么? (如果那應該是“內部連接”)?

更新

在我添加 Join 之前,我應該說這是有效的(使用復雜的 WHERE)(我是一個完全的 SQL 初學者)。

請研究INNER JOIN 和 LEFT JOIN之間的區別。

通過查看您的查詢和基於名稱的水晶球凝視以及與現實世界實體的關聯,我可以看到以下內容:

當您的活動“傾倒”時,可能會涉及一些化學物質,這些化學物質將成功加入條形碼。 當它是“登錄”時,我懷疑您是否會針對化學表獲得成功的 (INNER) JOIN。 正如有人提到的,你真的想把它們變成 LEFT JOINs,例如

SELECT users.name, 
       from_unixtime(activity.time_stamp, "%D %b %Y  %l:%i:%S"), 
      activity.activity, 
      activity.rfid_tag, 
      chemicals.description 
FROM activity 
LEFT JOIN chemicals ON chemicals.bar_code = activity.bar_code 
LEFT JOIN users ON users.badge_number=activity.badge_number 
WHERE  (activity="login") 
   OR (activity="logout") 
   OR (activity LIKE "Admin:%") 
   OR (activity="tag") 
   OR (activity="untag") 
   OR (activity LIKE "check out%") 
   OR (activity LIKE "pour%") 
   OR (activity="check out (unscheduled)") 
   OR (activity="not poured after checking out") 
   OR (activity LIKE "invalid:%") 
ORDER BY time_stamp DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM