Mysql 使用单个if条件选择多个列
我尝试了下面的查询,但不知怎么的,它对我不起作用。谁能告诉我为什么 查询:Mysql 使用单个if条件选择多个列,mysql,Mysql,我尝试了下面的查询,但不知怎么的,它对我不起作用。谁能告诉我为什么 查询: SELECT column1 , column2 , IF(start <="20:00:00" AND end >= "20:00:00") THEN (column3,column4,column5) ELSE (column6,column7,column8) END IF , column9 , column
SELECT column1
, column2
, IF(start <="20:00:00" AND end >= "20:00:00")
THEN (column3,column4,column5)
ELSE (column6,column7,column8)
END IF
, column9
, column10
FROM table_1
WHERE id ="1"
此语法不正确,如果采用这种方式,则无法使用 但你可以这样做:
select
column1,column2, column3,column4,column5,column9,column10
from table 1
where id ="1" AND (start <="20:00:00" AND end >= "20:00:00")
UNION ALL
select
column1,column2, column6,column7,column8,column9,column10
from table 1
where id ="1" AND (start >= "20:00:00" AND end <= "20:00:00");
但是,为了使其正常工作,列column3、column4、column5和column6、column7、column8应分别具有相同的数据类型。否则,您可能需要将它们转换为一种数据类型。感谢@Peter Abolins的注释。此语法不正确,如果采用这种方式,则无法使用 但你可以这样做:
select
column1,column2, column3,column4,column5,column9,column10
from table 1
where id ="1" AND (start <="20:00:00" AND end >= "20:00:00")
UNION ALL
select
column1,column2, column6,column7,column8,column9,column10
from table 1
where id ="1" AND (start >= "20:00:00" AND end <= "20:00:00");
但是,为了使其正常工作,列column3、column4、column5和column6、column7、column8应分别具有相同的数据类型。否则,您可能需要将它们转换为一种数据类型。感谢@peterabolins的注释,这不是if语句在mysql中的工作方式 在mysql中,它更像
if(some condition, is true return this, is false return this)
所以
你也可以把它们拴起来
if(1 = 1, if(2 = 2, do this, else this), else this)
如果你有编程背景,这可能会让人很困惑,但我认为你应该检查一下
检查一下,以更好地了解你想要实现的目标。我认为你最好是用案例陈述,但如果也能用的话。祝你好运 这不是if语句在mysql中的工作方式 在mysql中,它更像
if(some condition, is true return this, is false return this)
所以
你也可以把它们拴起来
if(1 = 1, if(2 = 2, do this, else this), else this)
如果你有编程背景,这可能会让人很困惑,但我认为你应该检查一下
检查一下,以更好地了解你想要实现的目标。我认为你最好是用案例陈述,但如果也能用的话。祝你好运 在与这个问题斗争之后,我来自未来。 对于使用UNION语句的对象,出于自身原因,您也可以使用JSON_对象语句:
SELECT column1
, column2
, (IF(start <="20:00:00" AND end >= "20:00:00"),
JSON_OBJECT("column3", column3,
"column4", column4,
"column5", column5
) as result,
JSON_OBJECT("column6", column6
"column7", column7
"column8", column8
) as result,
, column9
, column10
FROM table_1
WHERE id ="1"
在MySQL 5.7之后可以找到对JSON操作符的支持。
在与这个问题斗争之后,我来自未来。 对于使用UNION语句的对象,出于自身原因,您也可以使用JSON_对象语句:
SELECT column1
, column2
, (IF(start <="20:00:00" AND end >= "20:00:00"),
JSON_OBJECT("column3", column3,
"column4", column4,
"column5", column5
) as result,
JSON_OBJECT("column6", column6
"column7", column7
"column8", column8
) as result,
, column9
, column10
FROM table_1
WHERE id ="1"
在MySQL 5.7之后可以找到对JSON操作符的支持。
你想做什么?这可能会帮助你复制@PeterAbolins:谢谢你的回复,我试图根据单个if条件获取多个列,但不知何故,它不允许我这样做。@waka当我要选择多个列时,这个问题只有一个值。我知道如何使用单个列的条件,但不知道如何使用多个列。您想做什么?这可能会帮助你复制@PeterAbolins:谢谢你的回复,我试图根据单个if条件获取多个列,但不知何故,它不允许我这样做。@waka当我想选择多个列时,这个问题只有一个值。我知道如何使用单个列的条件,但不知道如何使用多个列。指出第3列,第4列和第5列需要与第6列、第7列和第8列相应地具有相同的类型,否则上述操作将失败。@PeterAbolins-您是对的,如果类型不同,UNION将失败。谢谢你的来信。我会更新答案。@DarwinThorburn:我已经尝试过了,但这在我的情况下不起作用。我需要一些东西,比如如果条件不满足,那么它必须向我提供其他条件的结果,但您在两个查询中都以相反的方式放置了这两个条件。指出第3列,第4列和第5列需要与第6列、第7列和第8列相应地具有相同的类型,否则上述操作将失败。@PeterAbolins-您是对的,如果类型不同,UNION将失败。谢谢你的来信。我会更新答案。@DarwinThorburn:我已经尝试过了,但这在我的情况下不起作用。我需要一些东西,比如如果条件不能满足,那么它必须向我提供其他条件的结果,但你在两个查询中都以相反的方式放置了这两个条件