gpt4 book ai didi

具有 NULL 值的 MySQL JOIN

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

我正在尝试执行一个相当复杂的(至少对我而言)查询,该查询涉及获取可能具有 NULL 值的行。

这里有四个表,tagsquestions_tagsusers_experience,和answers。连接相当简单。问题被标记,标签有名称,用户给出问题的答案,并且用户对特定标签有经验。我想找到用户给出的答案,以及他们对问题标签的体验(可能为 NULL)。我按针对特定标签给出的答案数量排序。

我的查询如下。这根本没有优化(如果您有优化建议,请建议!):

SELECT t.tag_id, t.name, ue.body, COUNT(a.qid)
FROM tags AS t
LEFT JOIN users_experience AS ue
ON t.tag_id = ue.tag_id
LEFT JOIN questions_tags AS qt
ON qt.tag_id = t.tag_id
LEFT JOIN answers AS a
ON a.qid = qt.qid
WHERE a.uid=1
GROUP BY t.tag_id
ORDER BY COUNT(a.qid) DESC;

我在上面的查询中遇到的问题是,如果任何人 已经记录了特定标签的经验,那么无论这是否是他们的经验,都会向用户显示。我只想看到特定用户的体验,而这个查询并没有这样做。我在其他地方遇到过这个问题并被难住了,所以不得不绕过它。

我尝试将 AND ue.uid = 1 添加到查询中,但这会将结果限制在那些已经给出经验的人身上,而不是返回 NULL 值也是我想要的。

有什么想法吗?

最佳答案

您的 AND ue.uid = 1 直觉并没有错,但它属于 ON 子句,因此它是 JOIN 的一部分, 它用于确定哪些行有资格加入。

LEFT JOIN users_experience AS ue
ON t.tag_id = ue.tag_id AND ue.uid = a.uid

(然后该联接应放置在 answers 联接下。)

关于具有 NULL 值的 MySQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209763/

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