MySQL if / else或select if(contiton,'true','false'); - 语法问题

时间:2018-02-15 17:55:50

标签: mysql

当我使用

select if (1=1,'true','false');

然后一切都好,我收到'真'但是如果我试试

select if (1=1,(select * from table1), (select * from table2));`

我在mysql中收到语法错误! 随着

if condition then <SQL-Expression1> else <SQL-Expression2> end if;

当SQL-Expression像

这样复杂时,我遇到了同样的问题
select * from table1!

如果我使用复杂的SQL表达式,如

select * from table1 

insert into table1 (select field1 from table2 where 
                    field1>(select Max(field) from table1));

然后我总是收到语法错误,当这样的表达式包含在if / else-Statement!

中时

我如何适应它,可以选择复杂的sql-Statements?

我的问题是:

我制作了两张像

的桌子
create table1 (x1 int4, x2 int4, x3 int4);
create table2 (x int4);
insert into table1 values(1,2,3);
insert into table1 values(4,0,5);

我想将table1转换为table2

例如:

结果应该在table2中像这样

1
2
3
4
5

如果我用新行(例如

)放大表格1
insert into table1 values (6,7,8);

然后将table2更改为

1
2
3
4
5
6
7
8

我试图以这种方式制作

select if ((select count(*) from table2)=0,
          (insert into table2 (select x1 from table1 where x1>0)),
          (insert into table2 (select x1 from table1 where 
                               x1>(select Max(x) from table1))));

x2和x3也一样。 但语法错误发生了!

如果我只使用

insert into table2 (select x1 from table1 where x1>(select Max(x) from table1));

然后如果table1不是空的话就可以了,否则我必须这样做

insert into table2 (select x1 from table1 where x1>0);

1 个答案:

答案 0 :(得分:0)

SELECT子句中的子查询只能返回单个值;即不超过一个结果,不超过一列。您无法“欺骗”查询以返回不同数量的列。

此外,if-then形式的“if”是为程序sql保留的;用于存储过程,触发器等......