gpt4 book ai didi

Mysql (LEFT)JOIN 如何解释这种行为?

转载 作者:可可西里 更新时间:2023-11-01 08:53:17 25 4
gpt4 key购买 nike

使用 LEFT JOIN

SET @foo:=0;
SELECT @foo
FROM test t1
LEFT JOIN test t2 ON t2.id=t1.id AND (@foo:=@foo+1);

打印 0,0,0,0,0,0,0...

但使用 JOIN

SET @foo:=0;
SELECT @foo
FROM test t1
JOIN test t2 ON t2.id=t1.id AND (@foo:=@foo+1);

打印 1,2,3,4,5,6…

有人知道吗?谢谢!

更新。此查询产生相同的行,除了@foo 值

最佳答案

session 变量的赋值在 ON 子句中不起作用。

您看到 @foo 为 INNER JOIN 递增的原因是优化器将您的查询运行为:

SET @foo:=0;
SELECT @foo
FROM test t1
JOIN test t2
WHERE t2.id=t1.id AND (@foo:=@foo+1);

使用 EXPLAIN SELECT... 您应该会在额外的列中看到 using where

您还可以使用 EXPLAIN EXTENDED SELECT... 然后使用 SHOW WARNINGS 查看优化器如何运行您的查询。

在您的情况下,LEFT JOIN 查询完全按照编写的方式运行,对于这种类型的联接,您可以在 ON哪里

如果你想为 LEFT JOIN 递增 @foo 使用:

SET @foo:=0;
SELECT @foo
FROM test t1
LEFT JOIN test t2 ON t2.id=t1.id
WHERE @foo:=@foo+1

关于Mysql (LEFT)JOIN 如何解释这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com