【发布时间】:2013-09-20 02:15:02
【问题描述】:
我正在尝试根据 5 个表中的字段构建评论记录:
我已经标记了我需要的所有列,但目前我只是检索所有 user_rating 表。
这是我目前所拥有的:
SELECT DISTINCT user_rating.*, whiskey.name, user_notes.overall, users.image, user_rate.rate_number
FROM user_rating
LEFT JOIN whiskey ON whiskey.id = user_rating.whiskeyid
LEFT JOIN users ON users.username = user_rating.username
LEFT JOIN user_notes ON user_notes.username = user_rating.username AND user_rating.whiskeyid = user_notes.whiskey_id
LEFT JOIN user_rate ON user_rate.whiskey_id = user_rating.whiskeyid AND user_rate.username = user_rating.username
ORDER BY user_rating.id DESC
起初我认为这给了我想要的结果,但后来我注意到我得到了多行以及太多的空字段。任何帮助将不胜感激。
编辑:
多行是指重复的行。另外,我知道左连接会在连接的右侧产生空值。我的意思是我得到的空值比我应该得到的更多,因为数据在数据库中。
为了澄清,我正在尝试创建一个最近的评论列表,其中最近的评论排在最前面。每条评论由一个用户名、11 个类别(每个都是整数值)、总体评分(int 值)、注释(字符串)、图像(URL)和威士忌名称(字符串)组成。
【问题讨论】:
-
左连接说“给我左边的所有记录,即使我要加入的表上没有匹配的记录”。左右连接的最终结果通常是对应表的 NULL 字段。如果您只想要连接条件为真的情况,请将“LEFT”更改为“INNER”。
-
您能否提供一些示例数据和您所做想要的示例?
-
@ChrisRasco 我明白了,请看我编辑的帖子。
-
@GordonLinoff 我发布的图片显示了我正在查询的表的结构。我编辑了我的帖子以澄清我在结果中需要什么。我会将一些示例数据放在一起以进一步澄清。
-
@Bishop 你能发布一些你得到的重复记录吗?根据查询,我不确定您为什么会得到它们,并且根据结构和您的查询,它并不是立即显而易见的。