0

次のようなテーブルがあります

OWNERID 
PET_QUANTITY 
PET_TYPE

PET_TYPE は、DOG、CAT、または BIRD のいずれかです

所有者/ペットごとに 1 つのレコードがあるため、犬と鳥を飼っている場合、2 つのレコードがあり、pet_quantity は両方のレコードで 2 になります。

人が 2 匹のペットを飼っており、ペットが犬と猫であるすべての owner_ID が必要です。

4

1 に答える 1

5

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
于 2012-05-17T15:23:14.047 に答える