У меня есть следующий запрос, чтобы вернуть все user_attributes и атрибуты, которые имеют указанный тег:ЗЕЬЕСТА с помощью WHERE IN и HAVING COUNT терпит неудачу
SELECT `user_attributes`.*, `attributes`.*
FROM `user_attributes`
INNER JOIN `attributes` ON (`attributes`.`id` = `user_attributes`.`attribute_id`)
INNER JOIN `user_tags` ON (`attributes`.`id` = `user_tags`.`attribute_id`)
INNER JOIN `tags` ON (`user_tags`.`tag_id` = `tags`.`id`)
WHERE `user_attributes`.`user_id` = '1'
AND `tags`.`title` IN ('tag1')
Я хотел бы настроить запрос так, чтобы он находит все значения, имеют 2 метки. На данный момент у меня есть:
SELECT `user_attributes`.*
FROM `user_attributes`
INNER JOIN `attributes` ON (`attributes`.`id` = `user_attributes`.`attribute_id`)
INNER JOIN `user_tags` ON (`attributes`.`id` = `user_tags`.`attribute_id`)
INNER JOIN `tags` ON (`user_tags`.`tag_id` = `tags`.`id`)
WHERE `user_attributes`.`user_id` = '1'
AND `tags`.`title` IN ('tag1', 'tag2')
HAVING (COUNT(DISTINCT `tags`.`title`) = 2)
Это нарушение, потому что я использую HAVING без GROUP BY?
HAVING следует использовать в сочетании с GROUP BY действительно. MySQL - это единственная база данных, которая будет обрабатывать HAVING без GROUP BY как-то от WHERE –
Спасибо, если вы добавите это как ответ, я его приму. Я помещал GROUP BY в неправильное место и получал синтаксическую ошибку. Необходимо быть перед ИДЕЙ и после ГДЕ И. – xylar
В этом конкретном запросе вам, вероятно, понадобится 'GROUP BY user_attributes.attribute_id' (поскольку вы говорите, что хотите вернуть все user_attributes ...) Но' HAVING' без 'GROUP BY' является допустимым и полезным в других случаях. –