问题描述
项目数据库由mysql转为达梦数据库时,在测试模块是项目卡死,再连接达梦数据库连接不上。
解决
经过多次调试原来是sql语句,左联表语法写的错误导致
原代码
SELECT
om.energyitem_code AS otherEnergyitemCode,
om.NAME AS other_meter_name,
thisTable.date_time,
thisTable.val AS val,
thisTable.price,
CASE
WHEN SUM( thisTable.val ) IS NOT NULL
AND SUM( thisTable.val ) != 0
AND SUM( lastTable.val ) IS NOT NULL
AND SUM( lastTable.val ) != 0
THEN ROUND(( SUM( thisTable.val ) - SUM( lastTable.val )) / SUM( lastTable.val ), 2 )* 100 ELSE NULL
END AS basisVal
FROM
( SELECT * FROM base_othermeter WHERE id = '1780144278180093954' ) om
LEFT JOIN base_energyitem be ON om.energyitem_code = be.id
LEFT JOIN (
SELECT
*
FROM
base_other_energy
WHERE
date_time >= CONCAT( '2024', '-01-01' )
AND date_time < DATE_ADD( CONCAT( '2024', '-01-01' ), INTERVAL '1' YEAR )) thisTable ON thisTable.other_meter_id = om.id
LEFT JOIN (
SELECT
*
FROM
base_other_energy
WHERE
date_time >= DATE_SUB( '2024' || '-01-01' , INTERVAL '1' YEAR )
AND date_time < CONCAT( '2024', '-01-01' )
) lastTable ON lastTable.other_meter_id = thisTable.other_meter_id
AND DATE_ADD( lastTable.date_time, INTERVAL '1' YEAR ) = thisTable.date_time
GROUP BY
om.energyitem_code,
om.NAME,
thisTable.date_time,
thisTable.val,
thisTable.price
把 AND DATE_ADD( lastTable.date_time, INTERVAL ‘1’ YEAR ) = thisTable.date_time 删除后功能正常
这也警示我以后写sql要写规范,尽量写的mysql、oracle、以及国产数据库语法通用。