2012-11-13 18 views
1

好吧我真的被卡住了。我有三個表如下:如何獲取表中的值不存在於mysql中的所有行

合同

contract_id | hotel_id | start | end 
--------------------------------------------------- 
    1    356  2012-12-12 2012-12-16 
    2    258  2012-12-12 2012-12-16 
    3    211  2012-12-12 2012-12-16 

hotel_info

hotel_id | hotel_desc 
------------------------------ 
    356   description 1 
    258   description 2 
    211   description 3 

contract_id | hotel_id | book_date | rate | closed 
-------------------------------------------------------------- 
    1   258  2012-12-12  250.00  1 
    1   258  2012-12-13  250.00  0 
    1   258  2012-12-14  250.00  1 
    1   258  2012-12-15  250.00  1 

現在我正在嘗試從用戶輸入的特定日期範圍之間的合約表中檢索所有行。正如你所看到的利率表是由每個日期分開。如果與它們相關的費率爲0,我不想返回任何行。因此,例如,如果我想獲得2012-12-14和2012-12-15之間日期的費率,我會得到一個結果。但如果我搜索2012-12-12到2012-12-14我沒有得到結果。我不知道這是否是超級混亂,但在這裏是MySQL我到目前爲止,這是行不通的:

SELECT r.*, c.* FROM contracts AS c 
INNER JOIN hotel_info AS r ON r.hotel_id = c.hotel_id 
INNER JOIN rates AS ra ON ra.contract_id = c.contract_id AND ra.closed != 0 
WHERE c.start <= '2012-12-12' AND c.end >= '2012-12-16' GROUP BY r.room_name 

任何幫助會如此感激!讓我知道如果我失去了一些東西。 Thannks提前!

+0

現在顯示什麼? – polin

+0

你還可以添加你想要的輸出嗎? –

+0

在利率表book_date是不一樣的我ncontracts開始結束日期。你想獲得_if的日期,如果我想得到2012-12-14和2012-12-15之間日期的費率,我會得到一個結果。但是,如果我搜索了2012-12-12到2012-12-14,我沒有得到result_,如果您在'contracts'表中搜索那樣的日期,您根本沒有收到數據。現在在您的查詢中,您不是在**日期之間搜索**,而是在相反的...... – Justin

回答

1

如果我正確理解這一點,如果在合同指定的日期範圍內的關聯費率記錄範圍的比率爲1,您只想返回數據。我認爲使用NOT EXISTS可能會做你想做的事。

SELECT r.*, c.* FROM contracts AS c 
    INNER JOIN hotel_info AS r ON r.hotel_id = c.hotel_id 
    INNER JOIN rates AS ra ON ra.contract_id = c.contract_id AND ra.closed != 0 
WHERE c.start >= '2012-12-12' AND c.end <= '2012-12-16' 
    AND NOT EXISTS 
    (
     SELECT 
      1 
     FROM rates ira 
     WHERE ira.contract_id = ra.contract_id 
      AND ira.rate = 0 
    ) 
GROUP BY r.room_name 
相關問題