#mysql
#mysql
Вопрос:
У меня есть 2 таблицы с именами users amp; selected_users. Я показал структуру таблиц с некоторыми фиктивными значениями ниже.
Таблица: пользователи КАК t1
---- --------
| id | name |
---- --------
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
---- --------
Таблица: выбранные пользователи
---- ------------
| id | users_id |
---- ------------
| 1 | 2 |
| 2 | 5 |
---- ------------
Желаемый результат:
------- ---------- -----------
| t1_id | t1_name | selected |
------- ---------- -----------
| 1 | A | NO |
| 2 | B | YES |
| 3 | C | NO |
| 4 | D | NO |
| 5 | E | YES |
------- ---------- -----------
Что я сделал:
Я написал следующий скрипт.
SELECT t1.id AS t1_id, t1.name AS t1_name, CASE WHEN t2.t1_id=t1.id THEN 'YES' ELSE 'NO' END AS selected_in_t2
FROM t1
JOIN t2
Но он показывает мне несколько значений для каждого. Пожалуйста, помогите.
Комментарии:
1.
...JOIN t2 USING (id)
.JOINS
почти всегда используйте критерий соединенияON
илиUSING
. Нет смысла использовать псевдонимы с тем же именемt1 AS t1
. Также не используйте «не работает» в качестве описания проблемы, покажите ошибку или полученные результаты. Добро пожаловать в SO.2. Я обновил его. Пожалуйста, проверьте сейчас. Он показывает мне несколько значений.
Ответ №1:
Я сделал это с помощью этого запроса.
SELECT t1.id AS t1_id, t1.name AS t1_name,
CASE WHEN t2.id IS NULL THEN 'No' ELSE 'Yes' END as selected
FROM t1
LEFT JOIN t2
ON t1.id = t2.t1_id ORDER BY t1.id
Комментарии:
1. Более простая версия вашего
CASE
IF(t2.id IS NULL, 'No', 'Yes) as selected