我在Mysql中有2个表,如下所示
表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
我正在尝试在table1中设置一个新字段(名为FLAG),如果在T2中存在t1.YEARMONTH行,则为Y,
我想要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
我不知道我的错误在哪里。任何帮助将不胜感激。
答案 0 :(得分:3)
试试这个:将CASE
与LEFT JOIN
一起使用,可以检查t2.yearmonth中是否存在t1.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
答案 1 :(得分:2)
尝试使用以下查询:
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