У меня есть 2 таблицы в Mysql, которые выглядят следующим образом
Таблица 1
ID YEARMONTH
------------------
1 201210
2 201211
3 201212
Таблица 2
ID YEARMONTH GRADE DESIG
--------------------------------
1 201210 G1 NULL
2 201210 G1 D2
3 201212 G1 D1
Я пытаюсь установить новое поле (называемое FLAG) в таблице1, которое будет Y, если строки существуют для t1.YEARMONTH в T2 else N
Я хочу получить следующий результат в T1
ID YEARMONTH FLAG
---------------------
1 201210 Y
2 201211 N
3 201212 Y
Я попробовал следующий запрос
SELECT
T1.ID,
T1.YEARMONTH,
CASE COUNT(T2.ID)
WHEN (SELECT
COUNT(T2.ID)
FROM TABLE2 T2)
> 0 THEN 'Y'
ELSE 'N'
END AS flag
FROM TABLE1 T1,
table2 T2;
Но он производит следующий вывод
ID YEARMONTH FLAG
---------------------------
1 201210 N
Я не знаю, где моя ошибка. Любая помощь будет оценена по достоинству.
Попробуйте использовать следующий запрос:
SELECT
T1.ID, T1.YEARMONTH,
(CASE
WHEN COUNT(T2.ID) > 0 THEN 'Y'
ELSE 'N'
END) AS FLAG
FROM TABLE1 T1
LEFT JOIN TABLE2 T2
ON T1.YEARMONTH = T2.YEARMONTH
GROUP BY T1.ID, T1.YEARMONTH
Вы можете увидеть требуемый вывод здесь http://sqlfiddle.com/#!9/162855/12
ПОПРОБУЙТЕ ЭТО: Используя CASE
с LEFT JOIN
вы можете проверить существование t1.yearmonth в t2.yearmonth и сгенерировать столбец флага соответственно
SELECT DISTINCT t1.id,
t1.yearmonth,
(CASE WHEN t2.yearmonth IS NOT NULL THEN 'y' ELSE 'n' END) flag
FROM table1 t1
LEFT JOIN table2 t2 ON t1.yearmonth = t2.yearmonth