【发布时间】:2012-10-13 04:52:12
【问题描述】:
我对 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 的最后一个 OR 匹配的行(867 中的 723)。例如,我没有看到 activity="login" 的任何行,但 SELECT * FROM activity WHERE activity="login" 确实返回了一些行。
我做错了什么? (如果应该是“INNER JOIN”)?
更新
在我添加 Join 之前,我应该说这是有效的(使用复杂的 WHERE)(而且我是一个 SQL 初学者)。
【问题讨论】:
-
activity是表名,也是列名o_0 -
好的,但是您还要添加条件,
activity="login"和chemicals.bar_code = activity.bar_code和users.badge_number=activity.badge_number条件仍然成立吗? -
bar_code和badge_number可以为空字段吗?如果是这样,那么chemicals和/或users上的连接可能应该是LEFT JOINs。 -
如果你改变了
ORs的顺序,你还是得到最后一个OR,还是OR (activity LIKE "invalid:%") -
@TheDOCTORfromTARDIS 为什么 mysql 会将值与表名匹配?