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条件的主要内容,如果未能解决你的问题,请参考以下文章