mysql查询以避免多次查询

时间:2013-07-24 08:39:29

标签: mysql

我有这张桌子:

CREATE TABLE my_table (
  col1 VARCHAR(55),
  col2 VARCHAR(55),
  col3 VARCHAR(55),
  0101 VARCHAR(55),
  0202 VARCHAR(55),
  0303 VARCHAR(55)
);

现在我想用另一个查询返回的数据填充表格,例如:

 SELECT   col1, col2, col3, GROUP_CONCAT(col4)
 FROM     my_other_table
 GROUP BY col1, col2, col3

现在这个查询产生了这一行(还有更多,但对于我的情况,一行就足够了):

 col1     col2        col3      GROUP_CONCAT(col4)
 -------------------------------------------------
 FIB100   internet   1MEGAMAX       0202,0404

现在我要做的是检查在连接值中是否有我的表my_table的NOT YET填充列(0101 0202 0303)的列名。如果是的话我想要放一个X

像这样:

表:插入后的my_table

 col1     col2        col3       0101   0202    0303 
 -----------------------------------------------------
 FIB100   internet   1MEGAMAX             X

我的问题:有没有办法用同样的查询做到这一点??

谢谢

4 个答案:

答案 0 :(得分:0)

使用案例陈述

Select col1, col2, col3, 
case when 0101 then x else '' end as 0101,
case when 0202 then x else '' end as 0202,
case when 0303 then x else '' end as 0303 from table.

摄影指导Vinit

答案 1 :(得分:0)

用例关键字。语法请参见此处http://www.firebirdsql.org/refdocs/langrefupd15-case.html

答案 2 :(得分:0)

您也可以使用IF()

select if(emp_id=1,'X','') as test, emp_id from TABLE_NAME;

答案 3 :(得分:0)

希望这会对你有所帮助。

我已经更改了列的名称(不能使用数字作为列的名称)

CREATE TABLE my_table1 (
  col1 VARCHAR(55),
  col2 VARCHAR(55),
  col3 VARCHAR(55),
  c0101 VARCHAR(55),
  c0202 VARCHAR(55),
  c0303 VARCHAR(55)
);

CREATE TABLE my_other_table (
  col1 VARCHAR(55),
  col2 VARCHAR(55),
  col3 VARCHAR(55),
  col4 VARCHAR(55)
);

然后,查询是:

INSERT INTO my_table (col1,col2,col3,c0101,c0202,c0303)
    select col1, col2, col3, 
           if (GROUP_CONCAT(col4) like '%0101%' , 'X' , '') as c0101,
           if (GROUP_CONCAT(col4) like '%0202%' , 'X' , '') as c0202,
           if (GROUP_CONCAT(col4) like '%0303%' , 'X' , '') as c0303
    From my_Other_table
    group by col1, col2, col3;