gpt4 book ai didi

3 个表上的 MySql 查询未返回所有行

转载 作者:行者123 更新时间:2023-11-29 06:31:43 25 4
gpt4 key购买 nike

我有 3 个表:问题、选项、comments_to_options(opt_comments)。我想编写一个查询,在每一行中返回以下连接的值:

一个问题,它的所有选项,每个选项的所有评论。

我的查询是:

select 
concat('{', '"qid":"', q.q_id, '", "qt":"', q.q_title,
'", "op":[', group_concat('{"oi":"', o.op_id, '", "ot":"', o.opt_value, '", ', oc_list, '}'
order by o.opt_upvotes desc), ']}')
as r
from questions q, options o,
(select o.op_id as ocid, concat('"oc":[', group_concat('{"oci":"', oc.opt_com_id, '", "occ":"', oc.opt_com_value, '"}'
order by oc.opt_com_added_at), ']')
as oc_list
from options o, opt_comments oc
where oc.opt_com_to=o.op_id
group by o.op_id)
as r2
where o.op_id=r2.ocid
and q.q_id=o.option_to
group by q.q_id
order by q.q_added_at desc
limit 3;

但是上面的查询只给出了那些至少有一个评论的选项。我该如何修改?

最佳答案

您正在使用旧的 JOIN 语法和以逗号分隔的表和子查询列表。该语法是正确的,但会生成 INNER JOIN 操作。此类连接会抑制与连接条件不匹配的行。

您需要采用LEFT JOIN 语法。在不重构整个查询的情况下,我会说你应该改变

 FROM a, 
(select something from z) AS b
WHERE a.value=b.value

 FROM a 
LEFT JOIN (select something from z) AS b ON a.value=b.value

另外,请注意,您可能会遇到 GROUP_CONCAT() 中的字符串长度限制。读这个:

MySQL and GROUP_CONCAT() maximum length

关于3 个表上的 MySql 查询未返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566622/

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