2017-01-23 86 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))' –