我将informix数据库转换为mysql时遇到问题。 我完成了大部分工作,但有些功能不起作用。
$dir = ltr
显示:ERROR 1066(42000):不是唯一的表/别名:' mp'
是的,这是旧的$dir = rtl
如果你对此有一个很好的想法,会很有意思。
答案 0 :(得分:0)
如果要使用JOIN,则不需要使用FROM子句中的所有表,因为您复制了作业。如果要将表放在FROM子句和JOIN中,则应使用不同的别名。你应该这样做:
DELIMITER //
CREATE FUNCTION mw_getsvid(mwid INT) RETURNS INT
BEGIN
DECLARE svId INT;
SELECT sv.ID INTO svId
FROM messwert AS mw
LEFT JOIN messpunkt mp ON mw.messpunktid = mp.id
LEFT JOIN mpzuordnung mpz ON mp.id = mpz.messpunktid
LEFT JOIN summvorschrift sv ON mpz.summvorschriftid = sv.id
LEFT JOIN messwert mw ON mpz.zeitraum_von <= mw.datendatum
LEFT JOIN messwert mw ON mpz.zeitraum_bis > mw.datendatum;
UNION ALL
SELECT sv.ID INTO svId
FROM messwert AS mw
RIGHT JOIN messpunkt mp ON mw.messpunktid = mp.id
RIGHT JOIN mpzuordnung mpz ON mp.id = mpz.messpunktid
RIGHT JOIN summvorschrift sv ON mpz.summvorschriftid = sv.id
RIGHT JOIN messwert mw ON mpz.zeitraum_von <= mw.datendatum
RIGHT JOIN messwert mw ON mpz.zeitraum_bis > mw.datendatum;
RETURN svId;
END //;
DELIMITER ;