次のようなテーブルがあります
OWNERID
PET_QUANTITY
PET_TYPE
PET_TYPE は、DOG、CAT、または BIRD のいずれかです
所有者/ペットごとに 1 つのレコードがあるため、犬と鳥を飼っている場合、2 つのレコードがあり、pet_quantity は両方のレコードで 2 になります。
人が 2 匹のペットを飼っており、ペットが犬と猫であるすべての owner_ID が必要です。
PET_QUANTITY
まず、特定の行の値が他の行のデータに依存するため、データ モデルはかなり残念です。これは、基本的な正規化規則に違反しています。その結果、必然的に同期がとれなくなる状況が発生するため、PET_QUANTITY
ルールまたはテーブル内の行数がルールに従っているかどうかを判断する必要があります。適切に正規化されたデータモデルがあれば、はるかに優れたサービスを提供できます。
PET_QUANTITY
不一致がある場合の規則を仮定すると、1 つのオプションは、INTERSECT
SELECT owner_id
FROM your_table
WHERE pet_quantity = 2
AND pet_type = 'CAT'
INTERSECT
SELECT owner_id
FROM your_table
WHERE pet_quantity = 2
AND pet_type = 'DOG'
もう1つは、次のようなことをすることです
SELECT owner_id, COUNT(DISTINCT pet_type)
FROM your_table
WHERE pet_quantity = 2
AND pet_type IN ('DOG', 'CAT')
GROUP BY owner_id
HAVING COUNT(DISTINCT pet_type) = 2