2013-07-24 172 views
0

我有这个表: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)的列名称。如果为true,我想提出一个X

这样的:

表:MY_TABLE插入

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

我的问题后:有没有什么办法与同一个查询做到这一点?

谢谢

+1

没有ü以往任何时候都运行CREATE TABLE语句。我想,具有数字名称的列不会被创建。请在您的问题中更改您的列名称 –

+0

我的不好,你是对的,实际上列包含字母。 – user2613707

回答

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; 
+0

辉煌正是我所期待的,非常感谢 – user2613707

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

0

您可以使用IF()

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