2015-07-10 72 views
1

好日子,MySQL的子查詢簡單的SELECT問題

我有以下查詢。

SELECT `codeusage_id` FROM `panel_codeusage` 
WHERE `codeusage_exactdate` LIKE '2015-03%' 

這給出了178個結果。

但我想知道哪些codeusage鏈接到積極預訂。 所以我寫了這個子查詢。

SELECT `codeusage_id` FROM `panel_codeusage` A 
WHERE `codeusage_exactdate` LIKE '2015-03%' AND 
(SELECT `booking_cancel` FROM `panel_bookings` B 
WHERE A.`codeusage_link` = B.`booking_id` AND `booking_cancel` = 0) 

這雖然不給我任何結果。 誰能告訴我我做錯了什麼?

我已經編輯查詢看起來像:

SELECT `codeusage_id` FROM `panel_codeusage` A 
WHERE `codeusage_exactdate` >= '2015-03-01' AND 
     codeusage_exactdate < '2015-04-01' 
     EXISTS (SELECT 1 
       FROM `panel_bookings` B 
       WHERE A.`codeusage_link` = B.`booking_id` AND 
        `booking_cancel` = 0 
      ); 

依然無果。

當我直接在預訂表上運行小型查詢,以檢查是否有任何結果,我得到168個結果

SELECT * FROM `panel_bookings` WHERE `booking_code` != '' AND `booking_day` LIKE '2015-03%' AND `booking_cancel` = 0 

所以,我還是做錯了什麼......

回答

0

你有一個子查詢返回0,MySQL將其解釋爲false。您需要EXISTS

SELECT `codeusage_id` FROM `panel_codeusage` A 
WHERE `codeusage_exactdate` >= '2015-03-01' AND 
     codeusage_exactdate < '2015-04-01' AND 
     EXISTS (SELECT 1 
       FROM `panel_bookings` B 
       WHERE A.`codeusage_link` = B.`booking_id` AND 
        `booking_cancel` = 0 
      ); 

另外,不要對日期使用LIKELIKE適用於字符串,並且MySQL有大量可用於日期的函數。

+0

謝謝我添加了這個。沒有結果。 :-( 錯誤的日期方法是否會對結果造成任何損害? –

+0

@AlexHakkenberg ......也許沒有匹配的字段,如果你喜歡,你可以設置一個SQL小提琴。 –