2017-08-02 48 views
0

私のinformix dbをmysqlに変換する際に問題があります。 私はほとんどのことをやり遂げましたが、いくつかの機能は機能しません。エラー1066(42000):ユニークではないテーブル/別名: 'mp' mysqlのOUTER JOIN

これが現れる:ERROR 1066(42000):テーブル/エイリアスユニークではないが:uが持っている場合は、 'MP'

ところで、これは古いもの

CREATE PROCEDURE "informix".mw_getsvid(mwid INT) 
RETURNING INT; 

DEFINE svId INT; 
SELECT sv.ID INTO svId 
    FROM MessWert mw, MessPunkt mp, 
     OUTER (MPZuordnung mpz, SummVorschrift sv) 
    WHERE mw.id = mwid 
     AND mw.messpunktid = mp.id 
     AND mp.id = mpz.messpunktid 
     AND mpz.summvorschriftid = sv.id 
     AND mpz.zeitraum_von <= mw.datendatum 
     AND mpz.zeitraum_bis > mw.datendatum; 

RETURN svId; 

END PROCEDURE; 

だったが、greateのだろう良い考え:

+0

implizitとexplizitを結合しないでください。 – Jens

+0

外部結合とは何ですか? – itsme

+0

'外部結合はExplizit結合ですが、where句で結合が定式化されているカンマ区切りのテーブルもあります。それは動作しません – Jens

答えて

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 ; 
+0

これは異なる構文エラーを表示します^^ ERROR 1064(42000):SQL構文にエラーがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、 'INTの近くで使用する正しい構文を確認してください。 BEGIN DECLARE svId INT; SELECT sv.ID INTO svId messwert AS mw LEFT '1行目 – itsme

+0

@itsme申し訳ありません、あなたのコードからコピー&ペーストしました。今すぐ試してください。返される値が必要な場合は、FUNCTIONを使用する必要があります。そうでない場合は、PROCEDURE – nacho

関連する問題