我有一個博客文章表。如果用戶重新登錄帖子,則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