我有一张桌子如下
OWNERID
PET_QUANTITY
PET_TYPE
Run Code Online (Sandbox Code Playgroud)
PET_TYPE是DOG,CAT或BIRD
每个所有者/宠物有一条记录,所以如果有一只狗和鸟,则会有两条记录,而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'
Run Code Online (Sandbox Code Playgroud)
另一种方法是做类似的事情
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |