7

我想根据列数据执行不同的 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 语句是否可以工作但不能这样做。如何运行此选择?

谢谢。

4

2 回答 2

1

您可以使用UNION将 2 个不同 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)

但是考虑到这个问题,我假设您的真实情况要复杂一些。

MySQL 站点上的文档

于 2013-07-06T09:10:19.697 回答
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()) 以便删除您不感兴趣的时间。

于 2013-07-06T08:34:00.880 回答