2017-01-12 69 views
0

我在數據庫中3代表這樣返回查詢結果與工會內部查詢

availability

availability_id | date  | price | room_id | closed 
------------------------------------------------------- 
     1  | 2017-01-24 | 75 | 8  | 0 
     2  | 2017-01-24 | 95 | 9  | 0 
     3  | 2017-01-25 | 80 | 73  | 0 
     4  | 2017-01-25 | 70 | 65  | 0 
     5  | 2017-01-26 | 85 | 42  | 0 
     6  | 2017-01-26 | 65 | 21  | 0 

offer_day

plan_id | offer_id date | price  | room_id | | closed 
------------------------------------------------------------ 
1  |  12  | 2017-01-24 | 70 | 8 | 0 
2  |  23  | 2017-01-24 | 75 | 9 | 0 
3  |  12  | 2017-01-25 | 70 | 8 | 1 
3  |  14  | 2017-01-25 | 70 | 8 | 0 
4  |  34  | 2017-01-25 | 75 | 9 | 0 
5  |  43  | 2017-01-25 | 80 | 73 | 0 
6  |  54  | 2017-01-25 | 85 | 65 | 0 
7  |  65  | 2017-01-26 | 75 | 42 | 0 
8  |  44  | 2017-01-26 | 70 | 21 | 0 

package_day

package_id | date  | price | room_id | closed 
-------------------------------------------------- 
    1  | 2017-01-24 | 120 | 8  | 0 
    2  | 2017-01-24 | 125 | 9  | 0 
    3  | 2017-01-25 | 135 | 73  | 0 
    4  | 2017-01-25 | 130 | 65  | 0 
    5  | 2017-01-26 | 125 | 42  | 0 
    5  | 2017-01-26 | 120 | 21  | 0 

我有這樣的查詢:

SELECT a.price 
FROM availability a 
WHERE a.closed = 0 AND a.date >= '2017-01-24' AND a.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) 

UNION 

SELECT 0.price 
FROM offer_day o 
WHERE o.closed = 0 AND o.date >= '2017-01-24' AND o.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) 

UNION 

SELECT p.price 
FROM package_day p 
WHERE p.closed = 0 AND p.date >= '2017-01-24' AND p.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) 

如果我運行該查詢,我會得到所有行是closed = 0。正如您在表offer_day中看到的那樣,列closed中的值爲1。

我不想顯示的結果,如果在close列在同一room_id和相同offer_id任何行包含值1

例如,你可以在表offer_day看到room_id 8有兩個日期「2017- 01-24'和'2017-01-25'以及兩個offer_id 12和14在日期'2017-01-25'中有1個在closedoffer_id 8.我不想顯示room_id 8和offer_id 12如果有行包含值1

我該怎麼做?

謝謝。

+0

你有一個條件 - > x.closed = 0,在你的查詢中你會得到所有關閉的記錄= 0 –

+0

你知道嗎。但是,我希望在輸入的日期範圍內,如果在coloumn中存在值1,我不想顯示所有記錄@RafaelShkembi – Antonio

+0

查詢有什麼問題?輸出是什麼?你期待什麼輸出? – shmosel

回答

0

如果你不想房間裏,你可以使用bleow查詢

SELECT a.price 
FROM availability a 
WHERE a.closed = 0 AND a.date >= '2017-01-24' AND a.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and a.room_id NOT IN (select room_id FROM availability WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 

UNION 

SELECT o.price 
FROM offer_day o 
WHERE o.closed = 0 AND o.date >= '2017-01-24' AND o.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and o.room_id NOT IN (select room_id FROM offer_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 

UNION 

SELECT p.price 
FROM package_day p 
WHERE p.closed = 0 AND p.date >= '2017-01-24' AND p.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and p.room_id NOT IN (select room_id FROM package_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 

,你可以看到,如果關閉= 1我得到它的房號和房間號用它不行。 現在你有你的答案?

+0

我只是將colourmn offer_id更改爲plan_id,並將offer_id添加爲新coloumn。請再看看我的問題。 – Antonio

+0

它有效嗎? –

+0

我已經給出了想法,現在你可以用你自己的方式做出新的查詢 –

0

你在評論中問道,如果一個封閉的記錄是1,那麼你不想從你的表中獲取任何記錄。你可以做一個子查詢來檢查你是否有任何你不想要的值。 下面是一個例子

SELECT a.price 
FROM availability a 
WHERE a.closed = 0 AND a.date >= '2017-01-24' AND a.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and a.closed NOT IN (select closed FROM availability WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 

UNION 

SELECT o.price 
FROM offer_day o 
WHERE o.closed = 0 AND o.date >= '2017-01-24' AND o.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and o.closed NOT IN (select closed FROM offer_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 

UNION 

SELECT p.price 
FROM package_day p 
WHERE p.closed = 0 AND p.date >= '2017-01-24' AND p.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY) and p.closed NOT IN (select closed FROM package_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26') 
+0

可能它不會工作如果有任何數據o.closed = 1然後不帶任何單個數據事件o.closed = 0在給定的數據範圍內的其他值 –

+0

@krishnpatel是的我知道,但OP問他說,他想要採取所有的記錄與閉合= 0但如果表中存在closed = 1的記錄,則不會得到任何結果。我忘記了子查詢中的日期過濾器,我將更新我的答案 –

+0

@Antonio現在我明白了。請稍等幾分鐘我會更新我的ansewer –