Вам нужно использовать OR
вместо AND
. Прямо сейчас ваш мыслительный процесс выглядит так: «Мне нужно получить строки, где ключевое слово« снаружи », и строки, где ключевое слово« лето », поэтому мне нужно использовать AND
». Но с точки зрения СУБД, вы хотите, чтобы данная строка возвращалась, если ключевое слово «внутри» или , ключевое слово «лето» ... так что вам действительно нужно OR
, а не AND
.
EDIT:
Я вижу, что вы хотите сделать сейчас. Извините, что не читал более внимательно, прежде чем.
Попробуйте это (вероятно, есть более эффективный / масштабируемый способ сделать это, но это должно работать)
SELECT
*
FROM
people
WHERE
EXISTS(
SELECT
*
FROM
peoples_tags
WHERE
peoples_tags.people_id = people.id AND
peoples_tags.tag_id = 'outside'
) AND
EXISTS(
SELECT
*
FROM
peoples_tags
WHERE
peoples_tags.people_id = people.id AND
peoples_tags.tag_id = 'summer'
)
Редактировать 2:
Предполагая, что комбинация tag_id и people_id является уникальным ключом дляoples_tags, будет также работать следующее:
SELECT
people.*,
COUNT(*) AS Co
FROM
people
JOIN peoples_tags ON people.id = peoples_tags.people_id
WHERE
peoples_tags.tag_id = 'outside' OR
peoples_tags.tag_id = 'summer'
GROUP BY
people.id
HAVING
Co = 2