2017-06-20 76 views
1

我有生成的2個結果低於2個的MySQL查詢:合併2個MySQL結果與一個附加列

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

假設你的表的基數是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

您可以使用下面的代碼:

(SELECT f.*, 0 as Status FROM full_schedule as f) 
UNION 
(SELECT a.*, 1 as Status from available_schedule as a); 

正如你所看到的,你的這兩個問題的答案是肯定的。您可以添加一個額外的列(用於第一個問題的答案)並使用UNION來組合結果集,因爲您在最終結果中刪除了每個表的重複項。

+0

我可以知道如何設置a.Status中的1總是覆蓋f.Status嗎? – dnez

+0

沒有。它不覆蓋任何東西。結果會和你寫的一樣。 – OmG