У меня есть 2 таблицы: пользователи и подписчики . Отношение пользователя к подписчику - многие-ко-многим .
пользователей таблицы http://s019.radikal.ru/i621/1203/5c/bbfa4d42e678.jpg
таблица подписчиков http://s018.radikal.ru/i522/1203/7b/e7e61e6ba26d.jpg
Я знаю, как получить всех пользователей:
SELECT * FROM users
И я также знаю, как получить подписчиков для данного пользователя по его идентификатору (например, id = 1):
SELECT * FROM users LEFT JOIN subscribers ON id = user_id WHERE user_id = 1
Но мне нужны эти результаты не отдельно, а вместе.
То есть я хочу создать запрос для получения всех пользователей . Но в дополнение к их свойствам результат запроса должен содержать свойство , которое показывает, что каждый пользователь является подписчиком или нет. Примерно так:
стол подписчиков http://s019.radikal.ru/i622/1203/02/56eaf26cc442.jpg
И, конечно же, я бы хотел избежать использования подзапросов. Было бы здорово использовать только JOIN. Если это возможно,
Заранее спасибо!
Вы можете сделать:
SELECT u.*, CASE WHEN s.user_id IS NULL THEN 'false' ELSE 'true' END as IsSubscriber FROM users u LEFT JOIN subscribers s ON u.id = s.user_id
..., поскольку s.user_id будет сделано null с помощью left join, когда пользователь отсутствует в таблице subscribers.
s.user_id
null
left join
subscribers
SELECT users.id, users.firstname, users.lastname, COUNT(subscribers.user_id) != 0 AS isSubscriber FROM users LEFT JOIN subscribers ON users.id = subscribers.user_id GROUP BY users.id, users.firstname, users.lastname
Я обновил ваш запрос, чтобы получить то, что вы хотите.
SELECT u.id, u.firstName, u.lastname, WHEN s.user_id IS NULL 'false' else 'true' END as IsSubscriber. FROM users u LEFT JOIN subscribers s ON u.id = s.user_id WHERE user_id = 1