gpt4 book ai didi

MySQL:为什么子查询中的 where 子句对另一个子查询的结果不起作用?

转载 作者:行者123 更新时间:2023-11-29 08:16:36 28 4
gpt4 key购买 nike

我有这个选择语句:

select A.id,
(select id from B order by rand() limit 1)b1,
(select id from B where not id in(b1) order by rand() limit 1)b2,
(select id from B where not id in(b1,b2) order by rand() limit 1)b3,
(select id from B where not id in(b1,b2,b3) order by rand() limit 1)b4,
(select id from B where not id in(b1,b2,b3,b4) order by rand() limit 1)b5
from A

它不是很快,它不会给我错误,但也没有做我想要的事情。

我想从表 B 中读取 5 个随机 ID 并将它们连接到表 A。

到目前为止一切顺利,我从表 B 中得到了包含 5 个 id 的结果,但是有 double 。

尽管我有这个 where 子句应该防止 double ,但我明白了。

例如 A.id:1 有 b1=1、b2=6、b3=1、b4=9、B5=3

如果 MySQL 因无法处理该语句而抛出错误,我会理解,但什么也没有,所以我认为它应该可以工作,但事实并非如此。

有人有答案吗?

编辑:结果是否像这样(子查询)并不重要:1:2,7,3,9,6或者像这样(加入):1:21:71:31:91:6

只要每个 A.id 都有不同的 B.id 即可。两个或多个 A.Id 具有相同的 B.id 是可以的,但必须是巧合。

仍然是为什么 MySQL 接受查询并给出错误结果的问题。

最佳答案

select id, b1, b2, b3, b4, b5
from (
select A.id,
@ := (select GROUP_CONCAT(DISTINCT id ORDER BY RAND()) AS ids from B),

SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 1), ',', -1) b1,
SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 2), ',', -1) b2,
SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 3), ',', -1) b3,
SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 4), ',', -1) b4,
SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 5), ',', -1) b5
from A
) t

示例:http://sqlfiddle.com/#!2/d7df9/9

关于MySQL:为什么子查询中的 where 子句对另一个子查询的结果不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496064/

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