給定一個或多個owner_ids
(例如2,4和6),我想返回鏈接到owners
的resources.id
的列表owners_has_resources
。沒問題,我可以做SELECT DISTINCT ohr.resources_id FROM owners_has_resources ohr WHERE ohr.owners_id IN (2,4,6);
從SQL查詢中排除記錄
現在我堅持的部分。我想回的resources.id
列表與上面相同,但排除任何也與未缺失的業主(由owners.deleted!=true
確定),其中的鏈接不會被刪除(由owners_has_resources.deleted!=true
確定)
它可以假設owners.deleted
是true
所有最初提供owners_ids
(即2,4,6)
例如,給定owners_ids
2和4,我應該返回resources_id
2和3。注意,我的意思是說deleted=TRUE
表明它被刪除了,但是因爲已經發布了使用前面的答案,所以我不會編輯這個問題。相反,下面的真值表顯示了owner_not_deleted
和resource_not_deleted
。
+-----------+-------------------+--------------+----------------------+
| owners_id | owner_not_deleted | resources_id | resource_not_deleted |
+-----------+-------------------+--------------+----------------------+
| 2 | FALSE | 1 | TRUE |
| 2 | FALSE | 2 | TRUE |
| 4 | FALSE | 2 | TRUE |
| 4 | FALSE | 3 | TRUE |
| 5 | TRUE | 1 | FALSE |
| 5 | TRUE | 2 | TRUE |
| 7 | TRUE | 2 | FALSE |
+-----------+-------------------+--------------+----------------------+
owners
- id (INT PK)
- name, etc
- deleted (true/false)
resources
- id (INT PK)
- name, etc
owners_has_resources
- owners_id (INT PK REFERENCES owners.id)
- resources_id (INT PK REFERENCES resources.id)
- deleted (true/false)
你的用戶表是什麼?這張桌子是和其他人聯繫在一起的嗎? – Wistar
對不起,錯字。這應該是'所有者'。我會更新。 – user1032531
這似乎很明顯,你需要什麼。但我會給予懷疑的好處。你可以顯示一個小數據樣本。這樣我可以確定你在問什麼? –