SQL 查询优化 - 确定唯一值

SQL Query optimization - determining unique values

我需要确定学生 (student_id) 不唯一 person_id 和 return 另一列不唯一时为 0,唯一时为 1。

这是我的:

Select 
    student_id, 0
FROM
    PERSON
WHERE 
    PERSON.person_id in ( 
        SELECT PERSON.person_id
        FROM PERSON
        WHERE PERSON.person_id<>''
        GROUP BY PERSON.person_id
        HAVING COUNT(*)>1
    )
UNION
Select 
    student_id, 1
FROM
    PERSON
WHERE 
    PERSON.person_id not in (
         SELECT PERSON.person_id
         FROM PERSON
         WHERE PERSON.person_id<>''
         GROUP BY PERSON.person_id
         HAVING COUNT(*)>1
    )

示例数据:http://pastebin.com/EcqQU88J MS SQL 服务器

有没有更有效的方法来完成这项工作?

这样的事情可能更有效率。我觉得比较简单。

select student_id
, case when personIds = 1 then 0 else 1 end notUnique
from 
(select student_id
, count(distinct person_id) personIDs
from person
where person_id <> ''
group by student_id
) temp

您可以使用:

WITH cte AS
(
    SELECT person_id, COUNT(DISTINCT student_id) AS r
    FROM #PERSON
    GROUP BY person_id
)
SELECT student_id, CASE WHEN r = 1 THEN 0 ELSE 1 END
FROM #PERSON p
JOIN cte c
  ON p.person_id = c.person_id
-- ORDER BY student_id

您应该为 PERSON table 添加索引。

LiveDemo