Проблема с ключевым словом SQL Query Distinct - PullRequest
0 голосов
/ 15 октября 2011

При выполнении запроса на присоединение я получаю повторяющиеся данные вместо ключевого словаЯ потускнел гораздо больше Google и ничего не получил.Имена таблиц - это «Событие», которое содержит список событий, а другая таблица - это 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 ?? kinly help

Ответы [ 4 ]

2 голосов
/ 15 октября 2011

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 голос
/ 15 октября 2011

Пожалуйста, уточните свой вопрос, какой результат вы хотите увидеть.Ваш первый запрос возвратил отличительный результат, вы можете проверить его в проводнике данных SE здесь http://data.stackexchange.com/stackoverflow/qt/115261 Из MSDN: DISTINCT Указывает, что в наборе результатов могут отображаться только уникальные строки.

0 голосов
/ 15 октября 2011

Не должно повторяться событие '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/

0 голосов
/ 15 октября 2011

, если отдельное ключевое слово не работает, попробуйте добавить предложение 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
...