ERROR 1066(42000):不是唯一的表/别名:' mp'在mysql中加入OUTER

时间:2017-08-02 10:55:35

标签: mysql informix procedures mysql-error-1066

我将informix数据库转换为mysql时遇到问题。 我完成了大部分工作,但有些功能不起作用。

$dir = ltr

显示:ERROR 1066(42000):不是唯一的表/别名:' mp'

是的,这是旧的

$dir = rtl
如果你对此有一个很好的想法,

会很有意思。

1 个答案:

答案 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 ;