可以"在哪里"在以下SQL语句中省略?

时间:2016-01-31 17:43:33

标签: sql where-clause

我正在尝试动态构建应该如下所示的查询:

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

能帮助我理解:

  1. 为什么查询仍然有效?
  2. 在没有WHERE子句的情况下使用查询会有什么风险?
  3. 注意:选择WHERE 1 = 1是为了简单起见。

    非常感谢!

2 个答案:

答案 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
)