ここの例よりも複雑なクエリがありますが、特定のフィールドがデータ セットに複数回出現しない行のみを返す必要があります。
ACTIVITY_SK STUDY_ACTIVITY_SK
100 200
101 201
102 200
100 203
この例では、データ セットに 2 回出現する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
)
しかし、これを行うためのより安価な方法があるはずです...