Мне было интересно, может ли кто-нибудь указать на потенциальные проблемы с помощью следующего запроса или есть лучшая альтернатива
Из списка пользователей я хочу вернуть всех, у кого нет всех указанных user_profileпараметры или те, у которых по крайней мере один параметр не установлен в 1. Кажется, что следующий запрос работает нормально.
SELECT DISTINCT(c.id) FROM user c
WHERE c.id IN (901,907)
AND
((SELECT COUNT(id) FROM user_profile
WHERE option_id in (747,749) AND user_id=c.id) < 2
OR
(SELECT COUNT(id) FROM user_profile
WHERE option_id in (747,749) AND user_id=c.id AND preference = 1) != 1
)
Определение таблицы
CREATE TABLE `user_profile` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`option_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`preference` decimal(10,2) DEFAULT '0.00',
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `user_profile_user_id` (`user_id`),
KEY `user_profile_option_id` (`option_id`),
CONSTRAINT `user_profile_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `user_profile_option_id` FOREIGN KEY (`option_id`) REFERENCES `option` (`id`),
) ENGINE=InnoDB;