我在子查询中遇到了相关问题。
我有2张桌子:
- table1:包含带有groupid
,groupename
和categoryid
的“群组”
- table2:告诉哪些人是哪个组的成员(包含字段:userid
,groupid
)
我想问我的数据库给我:
每个来自特定“category
”的所有群组:
- groupid
,groupname
- 随机选择每组4名成员
我按照问题MySQL select 10 random rows from 600K rows fast生成了特定组的4个随机成员。
如果我单独运行查询,它的效果很好。
但如果我尝试将我的子查询合并到我的“常规查询”中:
SELECT
g.groupid, g.groupname,
(
SELECT GROUP_CONCAT(table2.userid SEPARATOR ",")
FROM table2, (
SELECT userid AS uid
FROM table2
WHERE table2.groupid = g.groupid
ORDER BY RAND( )
LIMIT 4
) tmp
WHERE table2.userid = tmp.uid
) AS randomusers
FROM table1 AS g WHERE g.categoryid = ?
...我得到"Unknown column 'g.groupid' in 'where clause'" ERROR.
我尝试将子查询传递给LEFT JOIN
但我无法弄清楚如何正确地执行它,因为我的每次尝试都没有成功。
对此有何帮助?谢谢:))
答案 0 :(得分:0)
如果我理解正确,您的查询看起来过于复杂
SELECT t1.groupid,
t1.groupname,
(SELECT GROUP_CONCAT(table2.userid) FROM table2 WHERE table2.userid = t1.userid ORDER BY RAND() LIMIT 4) AS `users`
FROM table1 AS t1
尚未对其进行测试,但此查询应返回每组的前四个随机元素