下面的SQL语句中是否可以省略"WHERE"?

Can "WHERE" be omitted in the following SQL statement?

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

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 子句的查询有什么风险?

注意:选择 WHERE 1 = 1 是为了简单。

非常感谢!

查询有效,因为您已将条件从 WHERE 子句移至 ON 子句。

因为你用的是INNER JOIN,效果是完全一样的。这两个查询做同样的事情,应该有相同的执行计划。

我建议您对列名进行限定,这样 table 它们的来源就很清楚了。我猜该专栏来自 candidate_status。如果是这样,将其放在 on 子句中更多是风格问题。

您可以向 JOIN ON 添加不止一个条件,这就是您正在做的事情。你

INNER JOIN candidate_status ON
(
  info_uniqid = status_info_uniqid AND status_status = :status_status
)