2017-08-18 99 views
0

我正在研究MySQL 5.7數據庫,並且遇到了一些我最近做的有點大的查詢時遇到了一些麻煩,我發現它有點深入特定部分未按預期運行。我做了一些測試,發現了一些奇怪的事情。儘管存在可用的值,MySQL MAX仍然返回null

的段是如下(號碼已被硬編碼爲特定的方案,但通常從另一個表其的值):

SELECT 
    MAX(cp.dataAtualizacao) dataAtualizacao, 
    MAX(m.dataRegistro) dataRegistro, 
    CASE WHEN MAX(cp.dataAtualizacao) > MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) THEN MAX(cp.dataAtualizacao) ELSE MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) END data 
FROM MadeiraNegocio cp   
    LEFT JOIN MadeiraConversaNegocio c ON (cp.id = c.idNegocioOriginal OR cp.id = c.idNegocioResposta) 
    LEFT JOIN MadeiraMensagemConversaNegocio m ON c.id = m.idConversa 
WHERE cp.id = 959 AND ((cp.id = c.idNegocioOriginal AND 960 = c.idNegocioResposta) OR (960 = c.idNegocioOriginal AND cp.id = c.idNegocioResposta)) AND 
    (cp.id = 959 OR 960 = cp.idNegocioOriginal) AND (m.idAutor != 4370 OR m.idAutor IS NULL) 

AS是,該查詢返回[NULL,NULL,NULL ]。第二個空是例外,但不是第一個和第三個。 真正嚇到我的是,事實上,如果我刪除第一個屬性上的MAX,dataAtualizacao正確返回,並非一個NULL值。

即使有要彙總的值,MAX如何返回null?我在這裏錯過了什麼嗎?

親切的問候

編輯

MadeiraNegocio表:

id dataRegistro idNegocioOriginal cancelado dataAtualizacao dataVisualizacao  
959 2017-08-18 11:28:58 null 0 2017-08-18 15:38:16 2017-08-18 16:00:23 

MadeiraConversaNegocio表:

id idNegocioOriginal idNegocioResposta dataVisualizacaoOriginal dataVisualizacaoResposta 
288 959 960 2017-08-18 14:54:10 2017-08-18 17:34:17 

MadeiraMensagemConversaNegocio

id idConversa idAutor mensagem dataRegistro 
229 288 4370 sometext 2017-08-18 16:25:02 
+0

當你用COUNT替換MAX時會發生什麼? – kbball

+0

它返回0,如果我用「SELECT *」替換整個select語句,它也不會返回任何條目。當我指定表和列時返回有效的時間戳時如何? –

+0

我們可能必須查看其餘的查詢或數據才能回答這個問題嗎?它沒有真正意義上的說 – kbball

回答

0

您可以嘗試使用count(),因爲它會始終返回一些值,或者您也可以嘗試COALSEC函數。

select count(field1) from table where id = 1 ; 
+0

由於某種原因,COUNT返回0,同時指定表和列給我一個值,選擇表中的所有列也沒有任何條目返回。 –

相關問題