我有一个比这里的示例更复杂的查询,但它只需要返回某个字段在数据集中不多次出现的行。
ACTIVITY_SK STUDY_ACTIVITY_SK
100 200
101 201
102 200
100 203
在此示例中,我不希望ACTIVITY_SK
返回任何值为 100 的记录,因为ACTIVITY_SK
它在数据集中出现了两次。
数据是一个映射表,用于许多连接,但是像这样的多条记录意味着数据质量问题,所以我需要简单地将它们从结果中删除,而不是在其他地方造成错误连接。
SELECT
A.ACTIVITY_SK,
A.STATUS,
B.STUDY_ACTIVITY_SK,
B.NAME,
B.PROJECT
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
我曾尝试过这样的事情:
SELECT
A.ACTIVITY_SK,
A.STATUS,
B.STUDY_ACTIVITY_SK,
B.NAME,
B.PROJECT
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
WHERE A.ACTIVITY_SK NOT IN
(
SELECT
A.ACTIVITY_SK,
COUNT(*)
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
GROUP BY A.ACTIVITY_SK
HAVING COUNT(*) > 1
)
但是必须有一种更便宜的方法来做到这一点......