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