Sql Oracle特定选择
我有一张桌子如下Sql Oracle特定选择,sql,oracle,Sql,Oracle,我有一张桌子如下 OWNERID PET_QUANTITY PET_TYPE 宠物类型为狗、猫或鸟 每个主人/宠物都有一个记录,因此如果有一只狗和一只鸟,则会有两个记录,两个记录中的宠物数量都是2 我想要所有主人的身份证,其中一个人有两只宠物,宠物是一只狗和一只猫 首先,数据模型非常不幸,因为特定行的PET_QUANTITY值取决于其他行中的数据。这违反了基本的规范化规则。这反过来又会造成一种情况,即不可避免地失去同步,因此必须确定PET_数量规则还是表中的行数规则。一个适当规范化的数据模
OWNERID
PET_QUANTITY
PET_TYPE
宠物类型为狗、猫或鸟
每个主人/宠物都有一个记录,因此如果有一只狗和一只鸟,则会有两个记录,两个记录中的宠物数量都是2
我想要所有主人的身份证,其中一个人有两只宠物,宠物是一只狗和一只猫 首先,数据模型非常不幸,因为特定行的
PET_QUANTITY
值取决于其他行中的数据。这违反了基本的规范化规则。这反过来又会造成一种情况,即不可避免地失去同步,因此必须确定PET_数量
规则还是表中的行数规则。一个适当规范化的数据模型会更好地为您服务
假设存在差异时,PET\u数量
规则,一个选项是使用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
首先,数据模型非常不幸,因为特定行的
PET_QUANTITY
值取决于其他行中的数据。这违反了基本的规范化规则。这反过来又会造成一种情况,即不可避免地失去同步,因此必须确定PET_数量
规则还是表中的行数规则。一个适当规范化的数据模型会更好地为您服务
假设存在差异时,PET\u数量
规则,一个选项是使用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
我希望这是一个愚蠢的学校问题(或类似问题),否则数据模型真的很糟糕。我希望这是一个愚蠢的学校问题(或类似问题),否则数据模型真的很糟糕。