将2个MySQL结果与另一列结合使用

时间:2017-06-20 02:58:13

标签: mysql sql

我有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

2 个答案:

答案 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组合结果集,因为您删除了最终结果中每个表的重复项。