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