我有2个MySQL查询生成以下2个结果:
SELECT * FROM `full_schedule`;
结果:
Date | Time
____________________
27-06-2017 | 0800
27-06-2017 | 0900
27-06-2017 | 1000
27-06-2017 | 1100
27-06-2017 | 1200
27-06-2017 | 1300
27-06-2017 | 0800
28-06-2017 | 0900
28-06-2017 | 1000
28-06-2017 | 1100
28-06-2017 | 1200
28-06-2017 | 1300
和
SELECT * from `available_schedule`;
结果:
Date | Time
___________________
27-06-2017 | 0800
27-06-2017 | 0900
28-06-2017 | 1000
问题1: 如何交叉检查两个结果,并将结果与添加列如下所示?
问题2: 可以将所有查询合并为1?
Date | Time | Status
___________________________
27-06-2017 | 0800 | 1
27-06-2017 | 0900 | 1
27-06-2017 | 1000 | 0
27-06-2017 | 1100 | 0
27-06-2017 | 1200 | 0
27-06-2017 | 1300 | 0
27-06-2017 | 0800 | 0
28-06-2017 | 0900 | 0
28-06-2017 | 1000 | 1
28-06-2017 | 1100 | 0
28-06-2017 | 1200 | 0
28-06-2017 | 1300 | 0
答案 0 :(得分:2)
假设您的表的基数为 full_schedule 1:1 available_schedule ,您可以执行左连接并根据右侧表中任何列的存在为状态创建计算字段(本例中的available_schedule):
SELECT A.Date,
A.Time,
(case when B.Time IS NULL then 0 else 1 end) as Status
FROM full_schedule A
LEFT JOIN
available_schedule B
ON A.Date=B.Date
AND A.Time=B.Time
<YOUR_WHERE_CLAUSE>
答案 1 :(得分:1)
您可以使用以下代码:
(SELECT f.*, 0 as Status FROM full_schedule as f)
UNION
(SELECT a.*, 1 as Status from available_schedule as a);
正如您所看到的,回答您的两个问题是肯定的。您可以添加一个额外的列(对于第一个问题的答案),并使用UNION
组合结果集,因为您删除了最终结果中每个表的重复项。