gpt4 book ai didi

mysql - MySQL 中 LIMIT 和 JOIN 的奇怪问题

转载 作者:行者123 更新时间:2023-11-29 11:05:42 24 4
gpt4 key购买 nike

我有这个查询:

SELECT          s.* 
FROM @mcmodlist_servers s
LEFT OUTER JOIN @mcmodlist_tag_server ts
ON ts.server_id = s.id

(不要介意 @mcmodlist_ 位,它由 PHP 转换为实际的表名称)。

当按照上面的方式执行时,它会给出 5 条记录的结果,这是应该的,但是当我添加 LIMIT 10 时,它突然返回 4。

但是等等,它会变得更好:如果我将其更改为LIMIT 12,突然又出现 5 条记录(LIMIT 11 仍然返回 4)。

左外层只有在有匹配记录时才应该加入,否则返回null,对吗?

为什么LIMIT会这样?没有 JOIN 子句就可以正常工作

最佳答案

我想如果你在 MySQL 客户端中运行查询,限制为 10,你会发现它实际上在结果集中返回 10 行。

我怀疑 @mcmodlist_tag_server 中有多行的 server_id@mcmodlist_servers 中的行匹配。当有多个匹配行时,您将从 @mcmodlist_servers 获取“重复”行。

鉴于 @mcmodlist_tag_server 表没有返回任何列,并且这是一个 OUTER 联接,因此根本不清楚为什么该表会包含在查询中。

不,LEFT JOIN 的含义并不像您所说的那样。

<小时/>

问:左外层只有在有匹配记录时才应加入,否则返回 null,对吧?

答:不,这不是 LEFT JOIN 的意思。 LEFT JOIN 将返回左侧表中的所有行以及右侧表中的匹配行,就像 INNER JOIN 一样。但对于 LEFT JOIN,如果左侧的行没有右侧的匹配行,则返回左侧的行。是的,当发生这种情况时,右侧表中的列将包含 NULL 占位符。

<小时/>

LIMIT 子句适用于结果集中返回的总行数。它并不意味着给定表中不同行的数量。

关于mysql - MySQL 中 LIMIT 和 JOIN 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452323/

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