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:我已经尝试过了,但这在我的情况下不起作用。我需要一些东西,比如如果条件不能满足,那么它必须向我提供其他条件的结果,但你在两个查询中都以相反的方式放置了这两个条件