mysql select语句中的if条件

Posted

技术标签:

【中文标题】mysql select语句中的if条件【英文标题】:if condition in mysql select statement 【发布时间】:2013-09-21 12:53:12 【问题描述】:

请帮助解决以下问题。我有一个名为 time_schedule 的表。 我的要求是如果 start_city_name='somecity' 那么我需要选择离开时间 否则我需要选择到达时间。这里我要选择哪一个。例如:

SELECT IF(start_city_name='somecity',departure_time,arrival_time) 
   FROM time_schedule;

这里如果条件匹配,则选择出发时间。然后我需要选择它作为出发时间。 否则,如果条件失败,则选择了到达时间,那么我需要选择结果作为到达时间。我正在使用 mysql。提前致谢。

【问题讨论】:

您的查询是否返回错误? 不,它正在执行。并给出结果。但不知道选了哪一个。 【参考方案1】:

要知道哪个被选中,你可以这样做:

SELECT IF(start_city_name='somecity', 'Departure time', 'Arrival time'),
       IF(start_city_name='somecity', departure_time, arrival_time)
FROM time_schedule;

你不能真的把它作为列名,如果有一行条件为真,另一行条件为假,列名应该是什么?

但是,如果您愿意将它们分成 2 列:

SELECT IF(start_city_name='somecity', NULL, arrival_time) AS 'Arrival time',
       IF(start_city_name='somecity', departure_time, NULL) AS 'Departure time'
FROM time_schedule;

这非常类似于简单地说:

SELECT arrival_time, departure_time
FROM time_schedule;

除了当条件为真时arrival_time 将是NULL,而当条件为假时departure_time 将是NULL

【讨论】:

谢谢@Dukeling。它接近我的要求。但我希望根据条件选择列名。假设选择了离开时间,那么在结果列中应该类似于离开。 因为我选择了更多列以及离开时间或到达时间。 实际上我有 start_city_name,end_city_name 列,它们与一个离开时间和到达时间相关联。如果我选择 start_city_name 作为我的起始位置,那么我需要选择离开时间。否则,如果我选择 start_city_name 作为结束位置,那么我需要在结果中选择到达时间,为 end_city_name 添加相同的场景。结果应该只包含离开时间和到达时间两列 @Srinivas 有点难以理解你到底想要做什么。您可以使用示例输入和输出来编辑您的问题吗?【参考方案2】:

像这样使用CASE 构造:

SELECT CASE start_city
         WHEN 'somecity' THEN departure_time
         ELSE arrival_time
       END AS column_alias
  FROM time_schedule;

Google for CASE 声明了解更多详情。这方面有很多资源。

【讨论】:

感谢@rachcha。我的要求如下。 column_name:departure/arrival column_value:departure_time/arrival_time 基于 start_city_name 列。 您的意思是'departure_time''arrival_time' 是字符串文字而不是列名吗? 这些是 time_schedule 表中的实际列名。根据 start_city_name 我需要选择离开时间或到达时间。我还想知道结果中选择了哪个作为别名列名。 那么在这种情况下@Dukeling 的回答会更适合您的要求。 实际上我有 start_city_name,end_city_name 列,它们与一个离开时间和到达时间相关联。如果我选择 start_city_name 作为我的起始位置,那么我需要选择离开时间。否则,如果我选择 start_city_name 作为结束位置,那么我需要在结果中选择到达时间。

以上是关于mysql select语句中的if条件的主要内容,如果未能解决你的问题,请参考以下文章

在 IF 语句中具有多个条件的 PDO MySQL SELECT

MySql数据库之子查询和高级应用

sql语句中if条件的使用

MySQL if语句条件连接[关闭]

MySQL Select 中的 If 语句

校验Select和Insert的方法