MYSQL RIGHT JOIN过滤器不起作用

时间:2014-12-18 19:46:01

标签: mysql

如果你能想象一个评论主题,这个查询用于下拉评论和回复。问题是我需要包含一个右连接来包含注释(这些注释列中包含空列值)。问题是它正在拉下所有注释行,如图所示。为什么我的pageId,classId,albumId过滤器没有正确过滤?

SELECT rp.votes, cmts.pageId, cmts.content_element_id, rp.userId as replyUserId, (select users.firstName from users where users.guid = rp.userId) as replyFirstName, 
(select users.lastName from users where users.guid = rp.userId) as replyLastName, rp.originalCommentId as replyOriginalCommentId,
rp.parentCommentId as replyParentCommentId, rp.commentId as replyCommentId, rp.text as replyText, rp.createdAt as replyCreatedAt,
rp.updatedAt as replyUpdatedAt, rp.status as replyStatus, cmts.classId as classId, cmts.albumId as albumId,
cmts.text as OriginalCommentText, cmts.status as CommentStatus, cmts.commentId as commentOriginalId,
cmts.createdAt as CommentCreatedAt, cmts.updatedAt as CommentUpdatedAt, cmts.status as cmtsStatus, cmts.userId as cmtsUserId, (select users.firstName from users where users.guid = cmts.userId) as commentFirstName, (select users.lastName from users where users.guid = cmts.userId) as commentLastName
FROM replies as rp
RIGHT JOIN comments as cmts ON rp.pageId = '36365094-0f52-49e3-bc0e-037edcca574b'
AND cmts.classId = '207'
AND cmts.albumId = '49152e6b-ca80-4889-a65e-4e6fd1dcc367'
AND rp.originalCommentId = cmts.commentId
ORDER BY cmts.createdAt

http://i59.tinypic.com/257q6wg.jpg

我无法进行内连接,因为它不会返回从图片中看到的空值。

@Gordon - 我想我需要一个额外的东西,就像这样:我现在要仔细检查它。

RIGHT JOIN comments cmts ON rp.pageId = '36365094-0f52-49e3-bc0e-037edcca574b' 
AND rp.originalCommentId = cmts.commentId
WHERE cmts.classId = '207' AND cmts.albumId = '49152e6b-ca80-4889-a65e-4e6fd1dcc367'  AND cmts.pageId = '36365094-0f52-49e3-bc0e-037edcca574b'
ORDER BY cmts.createdAt

1 个答案:

答案 0 :(得分:1)

您正在过滤right join子句中on中的第二个表。所以,这没有任何作用。添加where子句:

where cmts.classId = '207'AND cmts.albumId = '49152e6b-ca80-4889-a65e-4e6fd1dcc367'

进行过滤。

right join保留第二个表中的所有行,无论on子句是否计算为" true"," false"或{ {1}}。因此,忽略第二个表上的任何过滤器。

(请注意,对于NULL,同样的事情适用于第一个表。)

编辑:

left join子句将变为:

from