2

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

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

用逗号隔开的两张表是什么意思?

4

3 回答 3

7

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

笛卡尔积图

这意味着您将第一个表中的每一行与第二个表中的所有行配对。大多数时候,这不是你想要的。如果你真的想要它,那么使用CROSS JOIN符号会更清楚:

SELECT * FROM A CROSS JOIN B;
于 2012-04-11T19:22:02.307 回答
2

在这种情况下,这意味着您将从registration_waitinglist 的每一行加入registration_registrationprofile 的每一行

它被称为笛卡尔连接

于 2012-04-11T19:19:35.427 回答
1

该查询在“语法上”是正确的,这意味着它将运行。查询将返回registration_waitinglist x registration_registrationprofile 中每一行的整个产品。例如,如果waitlist 中有2 行,profile 中有3 行,则将返回6 行。

从实际情况来看,这几乎总是一个逻辑错误而不是故意的。除了极少数例外,where 子句中应该有连接条件或条件。

于 2012-04-11T19:21:36.633 回答