mySQL数据范围为个别日期的0/1标志

时间:2014-08-14 09:54:51

标签: mysql

我有两张桌子:

ID   | date       | flag
1    | 2014-08-20 | 0
1    | 2014-08-21 | 0
1    | 2014-08-23 | 0
1    | 2014-08-25 | 0
1    | 2014-08-28 | 0
2    | 2014-08-24 | 0

û

ID   | date_from  | date_to
1    | 2014-08-20 | 2014-08-22 
1    | 2014-08-27 | 2014-08-28 
2    | 2014-08-27 | 2014-08-28 

如果表t中的日期在表u的日期范围内,我想将'1'放入标志列。当然,对于每个个人ID。

所以我想在这种情况下:

ID   | date       | flag
1    | 2014-08-20 | 1
1    | 2014-08-21 | 1
1    | 2014-08-23 | 0
1    | 2014-08-25 | 0
1    | 2014-08-28 | 1
2    | 2014-08-24 | 0

我尝试了所有我能找到的例子,但是如果在表u中的任何一个范围内找到表t中的日期而不是确切的一个,我可以设法工作的唯一结果就是添加'1'期望的ID。因此标志栏填充了'1'。

1 个答案:

答案 0 :(得分:1)

使用左连接(左表中的所有行)连接它,然后检查连接表中是否存在条目。如果是,则返回1,否则返回0。

select
t.*,
if(u.id is null, 0, 1) as my_flag
from
t
left join u on t.date between u.date_from and u.date_to

您也可以将其转换为更新声明:

update
t
left join u on t.date between u.date_from and u.date_to
set t.flag = if(u.id is null, 0, 1);