С учетом такой таблицы (которую я получил, используя соединения и ссылки)
| post_id | comment_id |
| 1 | 100 |
| 1 | 101 |
| 1 | 102 |
| . 2 . | . 100 . |
| . 3 . | . 101 . |
| . 3 . | . 102 . |
и список из одного или нескольких идентификаторов комментариев.
(100, 101)
Найти только те сообщения, в которых сообщение не имеет ALL с указанными значениями comment_ids
Итак, с этой таблицей и списком comment_id (100 101),он должен возвращать идентификатор записи (2,3), потому что идентификаторы записи 2 и 3 не имеют комментариев 100 и 101.
При наличии списка comment_id (101) он должен возвращать идентификатор записи (2).
С comment_id (103) он должен вернуть post_id (1,2,3), потому что эти сообщения не имеют комментария 103 (который не существует).
Редактировать:
Мне удалось заставить его работать только с одним комментарием, введенным с этим кодом.
select post_id
from table_name
group by post_id
having count(*) = sum( comment_id not in (100) )
Я добавил «не» из ответа Гордона, чтобы заставить его работать, но когда я использую большечем один комментарий типа:
having count(*) = sum( comment_id not in (100, 102) )
, тогда он возвращает все post_ids (1,2,3).Должно быть только возвращение post_id (2,3).Post_id 1 имеет как 100, так и 102 comment_ids, поэтому его нельзя включить в запрос.
Как мне получить несколько идентификаторов комментариев?