gpt4 book ai didi

mySQL 子查询返回 NULL

转载 作者:行者123 更新时间:2023-11-30 22:56:27 25 4
gpt4 key购买 nike

我有一个博客文章表。如果用户重新发布帖子,则 source_hash 字段将填充原始帖子的哈希值。我也可以存储原始帖子的作者(用户名),但如果他们更改了用户名……好吧,你知道我要去哪里了。

所以我想做的是获取帖子的所有信息,加上使用父查询中的 source_hash 字段从子查询中获取原始作者的用户名。除了子查询之外,一切都完美无缺 - 它返回 NULL。

我已经删除了一些查询(它相当大)以了解它的实质。希望这是有道理的!

SELECT 
p.id AS pid
, p.uid
, p.hash
, p.source_hash
...
, u.id AS uid
, u.username
, u.avatar

, s.username AS source

FROM posts p
LEFT JOIN users u ON p.uid=u.id
...

# problematic subquery
LEFT JOIN users s ON (SELECT username FROM posts po LEFT JOIN users s ON s.id=po.uid WHERE po.hash=p.source_hash)

WHERE p.uid=1
GROUP BY p.id ORDER BY p.id DESC

编辑:我创建了一个 SQL Fiddle 并将所有内容都削减为最基本的组件。在 fiddle 中,source 列应该返回 lindsey

http://sqlfiddle.com/#!2/0183e/2

最佳答案

您使用子查询的 ON 条件在您的查询中有问题 - 简而言之,这是错误的。

在这种情况下我会编写下一个查询(经过测试,返回正确的结果):

SELECT 
p.id AS pid
, p.uid
, p.hash
, p.source_hash
...
, u.id AS uid
, u.username
, u.avatar

, u2.username AS source

FROM posts p
LEFT JOIN users u ON p.uid=u.id
...

# instead of subquery use left join with posts again for source post
LEFT JOIN posts p2 ON p.source_hash = p2.hash
# then join source post with another user table to get source username
LEFT JOIN users u2 ON u2.id = p2.uid

WHERE p.uid=1
GROUP BY p.id ORDER BY p.id DESC

关于mySQL 子查询返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189522/

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