如何根据不同的列数据进行选择

时间:2013-07-06 08:19:29

标签: mysql sql select if-statement

我想根据列数据执行不同的SELECT。例如,我有一个表http://sqlfiddle.com/#!2/093a2,我只想在use_schedule = 1时比较start_date和end_date。否则选择所有数据。 (一个不同的选择)基本上我只想比较起始和结束日期,如果只有use_schedule是1,如果use_schedule是0然后选择其余的数据。

示例可能类似于

select id, name from table
where use_schedule = 0 
else 
select id, name, start_date from table 
where use_schedule = 0 and current_date >= start_date.

基本上我有启用计划的数据,然后查看开始和结束日期。因为如果没有启用计划,则无需查看日期。只需选择数据即可。启用计划后,我希望在选择计划数据时更具选择性。

我试图弄清楚MySQL CASE或IF语句是否可行但不能这样做。如何运行此选择?

感谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下使用CASE ..:

SELECT id, name, 
   (CASE 
        WHEN start_date >= DATE(NOW()) AND use_schedule = 1 
        THEN start_date 
    ELSE NULL 
    END) AS cols FROM campaigns

这样它只选择日程表0或1,日期大于或等于现在; 我使用了DATE(NOW()),以便它删除你不感兴趣的时间。

答案 1 :(得分:1)

您可以使用UNION将两个不同SQL查询的结果混合并匹配到一个结果集中:

select id, name, null from table
where use_schedule = 0 
union 
select id, name, start_date from table 
where use_schedule = 1 and current_date >= start_date

请注意,两个查询都必须具有兼容的输出字段(相同的数字和类型才能生效)。使用UNION会自动仅合并不同的记录 - 如果您希望保留双重结果,请改为使用UNION ALL

在这种特殊情况下,更广泛的WHERE - 条款也可以明显起作用:

where use_schedule = 0 or (use_schedule = 1 and current_date >= start_date)

但是考虑到这个问题,我假设你的实际案例有点复杂。

Documentation over at MySQL site