我想改进我的SQL

时间:2017-03-09 21:54:31

标签: mysql sql

我有一个表(table1),它有2列 id 名称,下面是表格中的数据。

  

---- INPUT TABLE ---

id   name
 1  |  ABC
 2  |  XYZ
 3  |  DEF

我想编写SQL,它将提供输出,如下所述

输出的列是 id col1 col2 col3 ,以下是预期的值列

  

1 TRUE FALSE FALSE

     

2 FALSE TRUE

     

3 FALSE FALSE TRUE

现在我想根据上面的输出编写一个SQL。

我使用带有SQL的CASE语句编写了一个SQL,但我知道应该有更好的方法来编写这个SQL并获得输出。

我的SQL:

select id, CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS colTRUE ,FALSE as col2,FALSE as col3 from tabel1
union all
select id, FALSE AS col1 ,CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END as col2,FALSE as col3 from tabel1
union all
select id, FALSE AS col1 ,FALSE as col2,CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END col3 from tabel1

3 个答案:

答案 0 :(得分:2)

SELECT t.id, t1.id = t.id, t2.id = t.id, t3.id = t.id
FROM table t, table t1, table t2, table t3
WHERE t1.id != t2.id
  AND t2.id != t3.id
  AND t1.id != t3.id

答案 1 :(得分:1)

CASE声明是您应对此情况的最佳工具。有时你只需要第一次预感。但是,您不需要union all运算符,只需在SELECT语句中将每个CASE语句用作单个值。

答案 2 :(得分:1)

我认为这正是你要找的,但我不确定为什么。

select 
  id, 
  CASE WHEN NAME ='ABC' THEN 'TRUE' ELSE 'FALSE' END AS col,
  CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS col2,
  CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END AS col3 
from tabel1