MySQL JOIN Query показывать столбцы с выбранным параметром IF ELSE

#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