Mysql 隐式连接与否
我有点困惑,下面的代码中这是什么类型的连接。对我来说,这似乎是一个隐式连接,但我认为我们使用WHERE来指定将两个表连接在一起的列,而不是使用ON。但在这里,它看起来不像在哪里。我能想到的唯一可能的原因是,既然CTEseat_计数中只有一个数字,那么我就不需要指定使用哪一列了 如果有人想了解有关问题的一些信息: 带查询标签的图片: 查询文本: join FROM seat,seat_count相当于FROM seat CROSS join seat_count,这意味着在WHERE子句中没有其他条件的情况下,它将一个表的每一行与另一个表的每一行相匹配。使用交叉连接语法时,没有ON子句 在本例中,CTE SELECT COUNT*AS counts FROM seat肯定只返回一行。交叉连接最终将座椅的N行连接到座椅计数的1行 因此,它是一个交叉连接,但不会在结果中导致任何混乱的行乘法 对我来说,这似乎是一个隐式连接,但我认为我们使用WHERE来指定将两个表连接在一起的列,而不是使用ON 它不是隐式连接,而是交叉连接 同:Mysql 隐式连接与否,mysql,sql,join,Mysql,Sql,Join,我有点困惑,下面的代码中这是什么类型的连接。对我来说,这似乎是一个隐式连接,但我认为我们使用WHERE来指定将两个表连接在一起的列,而不是使用ON。但在这里,它看起来不像在哪里。我能想到的唯一可能的原因是,既然CTEseat_计数中只有一个数字,那么我就不需要指定使用哪一列了 如果有人想了解有关问题的一些信息: 带查询标签的图片: 查询文本: join FROM seat,seat_count相当于FROM seat CROSS join seat_count,这意味着在WHERE子句中没有其他
WITH seat_count AS(
SELECT COUNT(*) AS counts
FROM seat)
SELECT
(CASE
WHEN MOD(id,2)!= 0 AND counts != id THEN id+1
WHEN MOD(id,2)!= 0 AND counts = id THEN id
ELSE id-1
END) AS id,
student
FROM seat
CROSS JOIN seat_count
ORDER BY id ASC
你好,卢卡斯,非常感谢你的帮助!根据SQL-89标准,这是交叉连接的旧语法。它在29年前被使用交叉连接子句的SQL-92标准所取代。我建议您更新此材料。“在没有连接条件的情况下,内部连接和逗号在语义上是等效的:它们都在指定的表之间生成笛卡尔乘积,即第一个表中的每一行都连接到第二个表中的每一行。”-
WITH seat_count AS(
SELECT COUNT(*) AS counts
FROM seat)
SELECT
(CASE
WHEN MOD(id,2)!= 0 AND counts != id THEN id+1
WHEN MOD(id,2)!= 0 AND counts = id THEN id
ELSE id-1
END) AS id,
student
FROM seat, seat_count
ORDER BY id ASC
WITH seat_count AS(
SELECT COUNT(*) AS counts
FROM seat)
SELECT
(CASE
WHEN MOD(id,2)!= 0 AND counts != id THEN id+1
WHEN MOD(id,2)!= 0 AND counts = id THEN id
ELSE id-1
END) AS id,
student
FROM seat
CROSS JOIN seat_count
ORDER BY id ASC