#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Я пытаюсь получить список из таблицы Orders, где столбец Email_Id из таблицы Users содержит дубликаты (строки в пользователях с дублированными электронными письмами).
SELECT
o.[Email], o.[Email_Id], d.intCount
FROM (
SELECT [Email], COUNT(*) as intCount
FROM [Server].[dbo].[Table]
GROUP BY [Email]
HAVING COUNT(*) > 1
) AS d
INNER JOIN [Server].[dbo].[Table] o ON o.[Email] = d.[Email]
Итак, я попробовал со следующим:
SELECT * FROM [Server].[dbo].[Orders]
WHERE [Email_Id] IN/
SELECT
o.[Email], o.[Email_Id], d.intCount
FROM (
SELECT [Email], COUNT(*) as intCount
FROM [Server].[dbo].[Users]
GROUP BY [Email]
HAVING COUNT(*) > 1
) AS d
INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email]
)
Который возвращает только одно выражение, может быть указан в списке выбора, когда подзапрос не вводится с помощью EXISTS .
Также пробовал с:
SELECT [Order_Is], (
SELECT
o.[Email], o.[Email_Id], d.intCount
FROM (
SELECT [Email], COUNT(*) as intCount
FROM [Server].[dbo].[Users]
GROUP BY [Email]
HAVING COUNT(*) > 1
) AS d
INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email]
)
as [Email_Id]
FROM [Server].[dbo].[Orders]
С теми же результатами.
Есть идеи, что я делаю не так?
Спасибо!
Комментарии:
1. Добавлен
sql-server
тег на основе используемого синтаксиса2. Вторая попытка выглядит многообещающе, только
IN
для ключевого слова требуется один и тот же столбец для сравнения, без нескольких столбцов.
Ответ №1:
SELECT *
FROM [Server].[dbo].[Orders]
JOIN ( SELECT [Email], [Email_Id],
count(*) over (partition by [Email]) as cnt
FROM [Server].[dbo].[Users] ) tt
on tt.[Email_Id] = [Orders].[Email_Id]
and tt.[cnt] > 1
Ответ №2:
в вашем WHERE
подзапросе оператора у вас может быть только одно поле или выражение для IN
operator , вот что говорится в ошибке, попробуйте так:
SELECT * FROM [Server].[dbo].[Orders]
WHERE [Email_Id] IN (
SELECT
o.[Email_Id]
FROM (
SELECT [Email], COUNT(*) as intCount
FROM [Server].[dbo].[Users]
GROUP BY [Email]
HAVING COUNT(*) > 1
) AS d
INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email]
)