我有一张如下表
OWNERID
PET_QUANTITY
PET_TYPE
PET_TYPE 是 DOG、CAT 或 BIRD
每个所有者/宠物有一条记录,因此如果有一只狗和一只鸟,则将有两条记录,并且 pet_quantity 在两条记录中均为 2。
我想要该人有两只宠物并且宠物是狗和猫的所有 owner_ID。
首先,数据模型相当不幸,因为PET_QUANTITY
特定行的值取决于其他行中的数据。这违反了基本的规范化规则。而这反过来又会产生一种情况,您将不可避免地不同步,因此您必须确定规则是否PET_QUANTITY
规则或表中的行数是否规则。正确规范化的数据模型会为您提供更好的服务。
假设PET_QUANTITY
在存在差异时进行规则,一种选择是使用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'
另一个是做类似的事情
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