我在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


我正在尝试在表1中设置一个新字段(名为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


我不知道我的错误在哪里。任何帮助,将不胜感激。

最佳答案

尝试使用以下查询:

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看到所需的输出

关于mysql - 在Mysql中使用CASE将值设置为Alias字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47917639/

10-14 13:06
查看更多