블로그 게시물 용 테이블이 있습니다. 사용자가 게시물을 다시 블로그하면 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 Fiddle을 작성하여 모든 것을 기본 구성 요소로 축소했습니다. 바이올린에서 source
열은 lindsey
http://sqlfiddle.com/#!2/0183e/2
이 모든 독립적 인 하위 쿼리가 데이터를 가지고, 당신은 – anish
@anish 예, 하위 쿼리가 올바른 사용자 이름 때를 얻을 수 있는지 테스트 않았다 나는 해쉬'SELECT s.username FROM posts po 왼쪽 가입 사용자에게 s.id = po.uid WHERE po.hash = '2djeij83k'' – timgavin
테이블 구조와 테스트 데이터를 게시 할 수 있습니까? [SQL Fiddle] (http://sqlfiddle.com/)이 도움이 될 것입니다. – wchiquito