2012-08-05 50 views
0

我不undersand爲什麼MySQL的返回「MySQL並沒有生產記錄」,而我使用EXISTS(我情願選擇不產生記錄的子查詢):沒有結果,即使通過使用EXISTS

SELECT page_ID 
    FROM ranks_update 
    WHERE EXISTS (
    SELECT * 
    FROM ranks_update 
    WHERE ranking_ID = 3 
     AND current_rank = 1 
     AND rating_time < '2012-08-05 02:57:59' 
     AND rating_time >= '2012-08-05 00:00:00' 
    GROUP BY page_ID 
); 

根據定義,EXISTS允許從不返回任何記錄的查詢中得到結果。直到現在,在這種情況下,我一直都是NULL。

+0

什麼子查詢的回報? – 2012-08-05 16:31:38

+0

我願意選擇一個不產生記錄的子查詢。 – Anon 2012-08-05 16:37:10

+0

EXISTS(aaa)會產生一個布爾值,在你的情況下是「False」。你可以用'WHERE(1 = 0)'代替'WHERE EXISTS(...)'並得到相同的結果。順便說一下:子查詢與主要查詢不相關。這是你的意圖嗎? – wildplasser 2012-08-05 16:39:21

回答

1

它正在返回該消息,因爲沒有記錄匹配。 NULL是一列的值。它與空的回報集完全不同。

如果你有一個聚合函數,那麼空集返回一個NULL。所以下面將返回NULL值:

select max(Page_ID) 

,這將返回0:

select count(Page_ID) 
+0

好吧,如果我最終的目的是對page_iD的值做一個測試,比如「SELECT IF(page_ID> 10,1,'0).. WHERE EXISTS ..」,我總是被迫使用MAX:「 SELECT IF(MAX(page_ID)> 10,1,'0).. WHERE EXISTS ..「? – Anon 2012-08-05 16:48:58

+0

是或COUNT()。或者,您可以使用一個非常複雜的查詢,但聚合是最簡單的方法。 – 2012-08-05 17:01:30

+0

謝謝你的男人。 – Anon 2012-08-05 17:26:22

相關問題