2017-01-23 29 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

この質問はより多くの照明情報を提供しません。次の例のようにクエリを変更してみてください。

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はい、それは私が質問がより多くの照明情報を提供していないと書いた理由です。クエリに使用される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)) ' –

関連する問題