我遇到了以下SQL
声明,我想知道它是否有效:
SELECT COUNT(*)
FROM
registration_waitinglist,
registration_registrationprofile
WHERE
registration_registrationprofile.activation_key = "ALREADY_ACTIVATED"
用逗号分隔的两个表是什么意思?
答案 0 :(得分:7)
当您从多个表中SELECT
数据时,您将从这些表中获取所有元组的Cartesian Product
。它可以通过以下方式说明:
这意味着您从第一个表中获取每一行与第二个表中的所有行。大多数时候,它不是你想要的。如果你真的想要它,那么使用CROSS JOIN
表示法更清楚:
SELECT * FROM A CROSS JOIN B;
答案 1 :(得分:2)
在这种情况下,这意味着您将加入registration_waitinglist中的每一行到registration_registrationprofile中的每一行
它被称为笛卡尔联盟
答案 2 :(得分:1)
该查询在语法上是正确的,这意味着它将运行。查询将返回的是registration_waitinglist x registration_registrationprofile中每一行的整个产品。 例如,如果等待列表中有2行,配置文件中有3行,则返回6行。
从实际情况来看,这几乎总是一个逻辑错误,并非意图。除了极少数例外,where子句中应该有连接条件或条件。