2017-01-23 145 views
0

我有一個mysql查詢,它運行,但它只是掛起,不停止。我不確定查詢中斷的位置。MySQL查詢掛起

SELECT 
TIMESTAMPDIFF(SECOND, '1970-01-01 00:00:00', f.Datestamp) AS Epoch, 
f.value AS `Usage`, 
q.Name AS Quantity, 
q.QuantityID, 
units, 
PrimeDataItem, 
dd.Description 
FROM SourceChannels c 
JOIN UsageHhourly f ON c.ChanID = f.ChanID 
JOIN Quantities q ON c.QuantityID = q.QuantityID 
LEFT JOIN DigitalDescriptions dd ON ((c.DigitalDescriptionID = dd.DigitalDescriptionID) 
AND f.value = (CASE WHEN dd.Value REGEXP '^[0-9]' = 1 then dd.Value ELSE -1 END)) 
WHERE 
c.EquipmentID = 1496 
AND f.DateStamp >= '2016-12-28 00:00:00' 
AND f.DateStamp < '2017-01-04 00:00:00' 
ORDER BY q.QuantityID, f.datestamp 
+1

您是否使用了_EXPLAIN_? –

+0

尊重,您沒有給我們提供足夠的信息來幫助您。請閱讀這個。 http://meta.stackoverflow.com/a/271056/然後,請[編輯]你的問題。 –

+1

你可以把你的桌子結構放在這裏嗎? –

回答

0

該問題沒有提供更多的en-lighting信息。嘗試改變您的查詢,如下例所示。

SELECT 
TIMESTAMPDIFF(SECOND, '1970-01-01 00:00:00', `f`.`Datestamp`) AS `Epoch`, 
`f`.`value` AS `Usage`, 
`q`.`Name` AS `Quantity`, 
`q`.`QuantityID`, 
`c`.`units`, 
`c`.`PrimeDataItem`, 
`dd`.`Description` 
FROM `SourceChannels` `c` 
INNER JOIN `UsageHhourly` `f` ON `c`.`ChanID` = `f`.`ChanID` 
INNER JOIN `Quantities` `q` ON `c`.`QuantityID` = `q`.`QuantityID` 
LEFT JOIN `DigitalDescriptions` `dd` ON `c`.`DigitalDescriptionID` = `dd`.`DigitalDescriptionID` 
WHERE 
`f`.`value` = IF((dd.Value REGEXP '^[0-9]'),1,-1) 
AND `c`.`EquipmentID` = 1496 
AND `f`.`DateStamp` BETWEEN '2016-12-28 00:00:00' AND '2017-01-04 00:00:00' 
ORDER BY `q`.`QuantityID`, `f`.`datestamp`; 
+0

注意:將某些內容從「LEFT JOIN ... ON」移至「WHERE」可能會改變結果集。 –

+0

@RickJames是的,它可以,這就是爲什麼我寫道,問題不提供更多的en-lighting信息。沒有關於查詢中使用的MySQL表的信息。你說的很對。 –

+0

@RickJames我認爲你會同意這個查詢中的失敗部分是'LEFT JOIN DigitalDescriptions dd ON((c.DigitalDescriptionID = dd.DigitalDescriptionID) AND f.value =(CASE WHEN dd.Value REGEXP'^ [0- 9]'= 1 then dd.Value ELSE -1 END))' –