gpt4 book ai didi

mysql - 如何简化多个子查询和GROUP_CONCAT?

转载 作者:行者123 更新时间:2023-11-29 00:41:30 26 4
gpt4 key购买 nike

此查询从一个主表 m、三个辅助表 sod 中获取我想要的结果 在三个查找表 lslold 的帮助下,但它为每个字段查询每个表一次。

SELECT m.id, 
(SELECT GROUP_CONCAT(s.field1 SEPARATOR ', ')
FROM s, ls
WHERE ls.mid=m.id AND ls.sid=s.id)
AS s_field,
(SELECT GROUP_CONCAT(o.field1 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field1,
(SELECT GROUP_CONCAT(o.field2 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field2,
(SELECT GROUP_CONCAT(o.field3 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field3,
(SELECT GROUP_CONCAT(o.field4 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field4,
(SELECT GROUP_CONCAT(d.field1 SEPARATOR ', ')
FROM d, ld
WHERE ld.mid=m.id AND ld.did=d.id)
AS d_field1,
(SELECT GROUP_CONCAT(d.field2 SEPARATOR ', ')
FROM d, ld
WHERE ld.mid=m.id AND ld.did=d.id)
AS d_field2
FROM m
WHERE m.id=22 GROUP BY m.id

如何重写它以获得相同的结果,但每个表只有一个子查询。

最佳答案

您可以使用以下内容:

SELECT m.id, 
GROUP_CONCAT(sls.field1 SEPARATOR ', ') AS s_field,
GROUP_CONCAT(olo.field1 SEPARATOR ', ') AS o_field1,
GROUP_CONCAT(olo.field2 SEPARATOR ', ') AS o_field2,
GROUP_CONCAT(olo.field3 SEPARATOR ', ') AS o_field3,
GROUP_CONCAT(olo.field4 SEPARATOR ', ') AS o_field4,
GROUP_CONCAT(dld.field1 SEPARATOR ', ') AS d_field1,
GROUP_CONCAT(dld.field2 SEPARATOR ', ') AS d_field2,
FROM m
(
SELECT ls.mid, s.field1
FROM s
INNER JOIN ls
on s.id = ls.sid
) sls
on m.id = sls.mid
INNER JOIN
(
SELECT lo.mid, o.field1, o.field2, o.field3, o.field4
FROM o
INNER JOIN lo
on o.id = lo.oid
) olo
on m.id = olo.mid
INNER JOIN
(
SELECT ld.mid, d.field1, d.field2
FROM d
INNER JOIN ld
on d.id = ld.did
) dld
on m.id = dld.mid
WHERE m.id=22
GROUP BY m.id

关于mysql - 如何简化多个子查询和GROUP_CONCAT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100019/

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