Выберите строки с несколькими вхождениями в нескольких таблицах - PullRequest
1 голос
/ 16 марта 2011

БД: SQL Server 2008

Я хочу выбрать id, title и userid из таблицы, если этот идентификатор пользователя встречается в двух таблицах более одного раза.

Так что, если у пользователя есть 2 записи в таблице местоположений и 1 в таблице исполнителей, я хочу вернуть идентификатор, заголовок и идентификатор пользователя всех 3 записей.

Это то, что у меня сейчас, но он возвращает 0 записей.

Когда я пропускаю часть «имеющее количество (идентификатор пользователя)> 1», я получаю ВСЕ 400 записей во всех таблицах.

select userid,id,title from (
select id,title,userid from locations l
union
select id,title,userid from artists a
) as info
group by userid,id,title
having count(userid)>1

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я немного изменил вышеупомянутое, чтобы сделать его немного более гладким:

WITH combined AS
(
SELECT id from t1
UNION ALL
SELECT id FROM t2
etc...
)
SELECT id, count(id) as numOccurrences
FROM combined
GROUP BY id
HAVING count(id) > 1

Разница в том, что это покажет вам, сколько раз ваш номер повторяется.также можно добавить

ORDER BY numOccurrences to chop down your worst offenders first
1 голос
/ 16 марта 2011

Примерно так должно работать:

select userid,id,title 
from 
( select id,title,userid from locations l union select id,title,userid from artists a )
as grabfromthis
where userid in (
select userid
( select id,title,userid from locations l union select id,title,userid from artists a )
as info 
group by userid having count(userid)>1)
0 голосов
/ 17 марта 2011
;WITH combined AS (
  SELECT id, title, userid FROM locations
  UNION ALL
  SELECT id, title, userid FROM artists
)
SELECT *
FROM combined c
  INNER JOIN (
    SELECT userid
    FROM combined
    GROUP BY userid
    HAVING COUNT(*) > 1
  ) g ON c.userid = g.userid

Получите неуникальный список userid из подзапроса UNION и присоедините его к подзапросу на userid.Подзапрос реализуется только один раз, как CTE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...