没有JOIN的有效SQL?

时间:2012-04-11 19:16:57

标签: mysql sql

我遇到了以下SQL声明,我想知道它是否有效:

SELECT COUNT(*) 
    FROM 
        registration_waitinglist, 
        registration_registrationprofile 
    WHERE 
        registration_registrationprofile.activation_key = "ALREADY_ACTIVATED"

用逗号分隔的两个表是什么意思?

3 个答案:

答案 0 :(得分:7)

当您从多个表中SELECT数据时,您将从这些表中获取所有元组的Cartesian Product。它可以通过以下方式说明:

Cartesian product illustration

这意味着您从第一个表中获取每一行与第二个表中的所有行。大多数时候,它不是你想要的。如果你真的想要它,那么使用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子句中应该有连接条件或条件。