我是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
是ID
表中Rating
列的FK。
现在我要做的是从这个表中获取信息而不重复行。我需要从Rating
表中的UserName
表+ Clikes
和LikeDislike
列中获取所有列的数据,而不会有任何重复的行
更新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
答案 0 :(得分:2)
以下语法应删除完整的重复项:
SELECT distinct 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
这是你试过的吗?
答案 1 :(得分:0)
我认为这种方式会为你提供适当的输出
select ID, Topic,CountLikes,CountDisLikes,Extra,
UserName, Clikes from (
SELECT distinct R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra,
LD.UserName, LD.Clikes
, ROW_NUMBER() over (partition by R.ID order by R.ID desc) as rid
FROM Rating As R
LEFT JOIN LikeDislike AS LD on LD.TopicID = R.ID
ORDER BY R.ID desc) t where rid=1 order by ID desc
其他请检查likeislike tbl你在哪里插入2个主题为同一个id的评级tbl并检查UserName,Clikes也是否类似于likesislike tbl
答案 2 :(得分:0)
试试这个
SELECT R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra,
LD.UserName, LD.Clikes FROM Rating AS R
Left Join ( SELECT TopicID, UserName, min(Clikes) as Clikes
From LikeDisLike Group by TopicID,UserName) AS LD
on R.ID = LD.TopicID ORDER By R.ID Desc
顺便说一句,我认为您需要UNIQUE(TopicID,UserName)约束来避免重复。