0
我有一个表如下甲骨文具体选择
OWNERID
PET_QUANTITY
PET_TYPE
PET_TYPE或者是狗,猫或鸟
有每个业主一个记录/宠物,所以如果有一只狗和鸟类会有两个记录和pet_quantity在两个记录中都是2。
我想要所有的owner_IDs,其中人有两只宠物,宠物是一只狗和一只猫。
我有一个表如下甲骨文具体选择
OWNERID
PET_QUANTITY
PET_TYPE
PET_TYPE或者是狗,猫或鸟
有每个业主一个记录/宠物,所以如果有一只狗和鸟类会有两个记录和pet_quantity在两个记录中都是2。
我想要所有的owner_IDs,其中人有两只宠物,宠物是一只狗和一只猫。
首先,数据模型非常不幸,因为特定行的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
+1也适用于“*数据模型相当不幸*” –
我希望这是一个愚蠢的学校问题(或类似的),否则数据模型真的很糟糕。 – APC