【问题标题】:if condition in mysql select statementmysql select语句中的if条件
【发布时间】: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。提前致谢。

【问题讨论】:

  • 您的查询是否返回错误?
  • 不,它正在执行。并给出结果。但不知道选了哪一个。

标签: mysql select if-statement


【解决方案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 作为结束位置,那么我需要在结果中选择到达时间。
猜你喜欢
  • 2016-07-20
  • 2012-10-11
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多