我正在尝试动态构建应该如下所示的查询:
SELECT *
FROM candidate_info
INNER JOIN candidate_job ON info_uniqid = job_info_uniqid
INNER JOIN candidate_status ON info_uniqid = status_info_uniqid
WHERE 1 = 1
AND status_status = :status_status
无意中我发现如果省略WHERE
子句,查询就可以了:
SELECT *
FROM candidate_info
INNER JOIN candidate_job ON info_uniqid = job_info_uniqid
INNER JOIN candidate_status ON info_uniqid = status_info_uniqid
AND status_status = :status_status
能帮助我理解:
WHERE
子句的情况下使用查询会有什么风险?注意:选择WHERE 1 = 1
是为了简单起见。
非常感谢!
答案 0 :(得分:2)
查询正在运行,因为您已将条件从WHERE
子句移动到ON
子句。
因为您正在使用INNER JOIN
,效果完全相同。这两个查询执行相同的操作,并且应该具有相同的执行计划。
我建议您对列名进行限定,因此很清楚它们来自哪个表。我猜这个专栏来自candidate_status
。如果是这样,将它放在on
子句中更像是一种风格问题。
答案 1 :(得分:0)
您可以向JOIN ON
添加多个条件,这就是您正在做的事情。你
INNER JOIN candidate_status ON
(
info_uniqid = status_info_uniqid AND status_status = :status_status
)