执行连接查询时,我收到重复数据而不是“distinct”关键字。我昏昏欲睡谷歌并没有获得任何收益。表名是“Event”,它包含事件列表,另一个表是UserEvents,用于向用户分配通风口。可以将事件分配给多个用户。我正在使用SQL Server 2005。
Events
eid | ename
-----------------
e1 | Test event1
e2 | test ecent2
UserEvents
id| uid | eventId
-----------------
1 | u1 | e1
2 | u1 | e2
3 | u2 | e1
查询:
select distinct
Events.eid, Events.ename,UserVents.uid
from
Events
inner join
UserEvents on
UserEvents.eventID=Events.eid
输出:
eid | ename | uid
-------------------
e1 | Test event1 | u1
e2 | Test event2 | u2
e1 | test event1 | u1
问题:
此处,事件重复而不是不同的关键字。它不应该重复事件'e1'。 请帮助我。我如何更改查询?这是SQL Server 2005中的一个问题吗? 亲切的帮助
答案 0 :(得分:2)
DISTINCT
适用于整个列列表。整行需要相同才能消除。
由于错过了uid
列,您在问题中提出的结果并不完整。
WITH Events(eid,ename) AS(
SELECT 'e1' ,'Test event1' UNION ALL
SELECT 'e2' ,'test ecent2')
,UserEvents(id,uid,eventId) AS
(
SELECT 1,'u1' , 'e1' UNION ALL
SELECT 2,'u1' , 'e2' UNION ALL
SELECT 3,'u2' , 'e1'
)
select distinct
Events.eid, Events.ename,UserEvents.uid
from
Events
inner join
UserEvents on
UserEvents.eventId=Events.eid
返回
eid ename uid
---- ----------- ----
e1 Test event1 u1
e1 Test event1 u2
e2 test ecent2 u1
没有一行是相同的。
答案 1 :(得分:1)
请澄清你的问题,你想看到什么结果。您的第一个查询返回了区分结果,您可以在此处查看SE数据资源管理器 http://data.stackexchange.com/stackoverflow/qt/115261 来自MSDN:DISTINCT 指定结果集中只能显示唯一的行。
答案 2 :(得分:0)
如果distinct关键字不起作用,请尝试添加group by子句。 您的新查询应如下所示:
select
Events.eid, Events.ename,UserVents.uid
from
Events
inner join
UserEvents on
UserEvents.eventID=Events.eid
group by Events.eid, Events.ename,UserVents.uid
答案 3 :(得分:0)
不应重复事件'e1
我如何更改查询?
这可能就是你要找的东西:
select E.eid,
E.ename,
E.uid
from (
select Events.eid,
Events.ename,
UserEvents.uid,
row_number() over(partition by eid
order by UserEvents.uid) as rn
from Events
inner join UserEvents
on UserEvents.eventId=Events.eid
) as E
where E.rn = 1
结果:
eid ename uid
---- ----------- ----
e1 Test event1 u1
e2 test ecent2 u1
在SE数据上试用:http://data.stackexchange.com/stackoverflow/q/115257/