【发布时间】:2013-01-01 17:47:00
【问题描述】:
我是 SQL Server 的新手,我的一个 SQL 查询需要帮助。
我有 2 张桌子(Rating 和 LikeDislike)。
我正在尝试使用 LEFT JOIN 从这两个表中获取数据,如下所示:
SELECT
R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra, LD.UserName, LD.Clikes
FROM
Rating As R
LEFT JOIN
LikeDislike AS LD ON LD.TopicID = R.ID
ORDER BY
R.ID DESC
上面的SELECT 语句显示结果很好,但也包含重复项。我想在显示数据时删除重复项,我尝试使用DISTINCT 和GROUP BY,但没有运气,可能是因为我没有正确使用它。
更新:为了更清楚和减少混乱,让我告诉你每个表的具体作用以及我想要实现的目标。
Rating 表具有以下列 (ID, Topic, CountLikes, CountDisLikes, Extra, CreatedByUser)。它存储每个主题的主题信息和喜欢和不喜欢的数量以及创建该主题的用户的UserID。
LikeDisLike 表具有以下列 (ID, TopicID, UserName, Clikes)。 TopicID 是 Rating 表中 ID 列的 FK。
现在我要做的是从这两个表中获取信息,而不是重复的行。我需要从LikeDislike 表中获取Rating 表中的所有列+UserName 和Clikes 列中的所有数据,并且没有任何重复的行
更新 2:
以下是此 SELECT 语句的重复结果:
SELECT
DISTINCT ld.TopicID, R.ID, R.Topic, R.CountLikes, R.CountDisLikes,
LD.UserName, LD.Clikes
FROM
Rating AS R
LEFT JOIN
LikeDislike AS LD ON LD.TopicID = R.ID
结果输出:
TopicID ID Topic CountLikes CountDislikes UserName Clikes
NULL 79 Testing at home 1 0 NULL NULL
NULL 80 Testing at home2 1 0 NULL NULL
NULL 82 testing dislikes 0 1 NULL NULL
1 1 Do You Like This 211 58 3 FALSE
2 2 Or This 17 25 3 TRUE
76 76 Testing part 3 7 5 2 FALSE
76 76 Testing part 3 7 5 3 FALSE
77 77 Testing part 4 16 6 2 TRUE
77 77 Testing part 4 16 6 3 TRUE
77 77 Testing part 4 16 6 5 TRUE
【问题讨论】:
-
如果您的上述查询返回重复项(并且您尝试过 select distinct),则很可能您的列之一不同,大概是您的评级表中的 ID 列。你目前的输出是多少?
-
你能举例说明你得到的结果和输入数据吗?
-
您的一列可能在重复行中具有不同的值
-
也可能是您的列/表之一采用不同的编码
-
如果您想将来自
LikeDislike的所有匹配行减少到作为此连接的一部分,您需要告诉我们(最终,SQL Server ),如何减少这些行。例如。从输出中取出最后 3 行。有不同的UserName(可能还有CLikes)值——我们应该如何选择在这里显示的内容? (不要说“第一行”或类似的词,除非您根据可用的列对一行是第一行的含义有一些定义)
标签: sql sql-server tsql