在MySQL中组合简单的查询

斯特凡

我有一个表,如下所示service

id | service           | status | multicall | date_created         |
--------------------------------------------------------------------
10 | Cleaning          |    1   |      0    |  2016-09-20 19:11:01 |    
11 | Gardening         |    1   |      0    |  2016-09-20 19:12:07 |
12 | Dishes            |    1   |      1    |  2016-09-20 19:14:28 |    
13 | Take out rubbish  |    1   |      1    |  2016-09-20 19:14:28 |    

用户可以从该表中选择希望某人执行的服务。服务完成后,用户历史记录将保存在另一个表中user_service_hist

id | user_id | service_id | date_created         |
--------------------------------------------------
1  |    1    |     10     |  2016-11-25 10:49:05
2  |    1    |     11     |  2016-11-27 23:58:46
3  |    1    |     12     |  2016-11-28 00:01:36
4  |    1    |     13     |  2016-11-28 12:07:17

用户只能选择各服一次EXCEPT标有服务multicall column的价值1

当我调用可用服务列表时,我使用以下查询:

SELECT s.id, s.service, s.date
from service s WHERE not exists (Select 1 from user_service_hist ush    
where ush.service_id = s.id AND ush.user_id = 1)

由于用户已完成所有服务,因此此查询选择零行。我想显示服务nr。12和13始终如此,因为它们的多调用列值均为1,无论它是否完成。有人可以告诉我如何修改查询吗?

scaisEdge

您可以将查询与联合结合以进行多方通话

  SELECT s.id, s.service, s.date
  from service s WHERE not exists (Select 1 from user_service_hist ush    
  where ush.service_id = s.id AND ush.user_id = 1)
  union 
  SELECT s.id, s.service, s.date
  from service s WHERE multicall  = 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章