Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 隐式连接与否_Mysql_Sql_Join - Fatal编程技术网

Mysql 隐式连接与否

Mysql 隐式连接与否,mysql,sql,join,Mysql,Sql,Join,我有点困惑,下面的代码中这是什么类型的连接。对我来说,这似乎是一个隐式连接,但我认为我们使用WHERE来指定将两个表连接在一起的列,而不是使用ON。但在这里,它看起来不像在哪里。我能想到的唯一可能的原因是,既然CTEseat_计数中只有一个数字,那么我就不需要指定使用哪一列了 如果有人想了解有关问题的一些信息: 带查询标签的图片: 查询文本: join FROM seat,seat_count相当于FROM seat CROSS join seat_count,这意味着在WHERE子句中没有其他

我有点困惑,下面的代码中这是什么类型的连接。对我来说,这似乎是一个隐式连接,但我认为我们使用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

它不是隐式连接,而是交叉连接

同:

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