我有一个博客文章表。如果用户重新登录帖子,则source_hash
字段将填入原始帖子的哈希值。我也可以存储原始文章的作者(用户名),但是如果他们更改了用户名......那么您会看到我要去哪里。mySQL子查询返回NULL
所以我想要做的是获取所有帖子的信息,从子查询中使用父查询中的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小提琴,并削减了一切,它是最基本的组件。在小提琴的source
列应该返回lindsey
http://sqlfiddle.com/#!2/0183e/2
是您的所有独立的子查询有数据,你测试 – anish 2014-10-04 04:18:06
@anish是,子查询得到正确的用户名时我提供了散列'SELECT s.username FROM posts po LEFT JOIN users s ON s.id = po.uid WHERE po.hash ='2djeij83k'' – timgavin 2014-10-04 04:24:05
是否可以发布表结构和一些测试数据? [SQL小提琴](http://sqlfiddle.com/)会很有帮助。 – wchiquito 2014-10-04 07:45:06