ID非公開さん
2022/5/5 0:44
1回答
このようなER図を元にMySQLで、社員名(漢字) 資格名 報酬金額という順番でデータベースを表示させたいです。報酬金額は社員マスタの手当基礎額にスキルレベルマスタの重みを掛けて算出するものです。
このようなER図を元にMySQLで、社員名(漢字) 資格名 報酬金額という順番でデータベースを表示させたいです。報酬金額は社員マスタの手当基礎額にスキルレベルマスタの重みを掛けて算出するものです。 それを踏まえて、このようなSQL文を作ったのですが、エラーが出てしまいます。エラーの種類を調べたところ、優先度の問題なのかもしれないのですが、詳しい直し方がわからず、そもそも直したところで根本的に合っているのかがわかりません。回答よろしくお願いします。 SELECT -> t1.emp_name_kanji, t3.license_name,t1.based_paid * t5.weight -> FROM -> m_emp t1 -> INNER JOIN m_post t2 -> ON t2.post_id = t1.post_id -> LEFT OUTER JOIN t_get_license t4 -> ON t4.emp_cd = t1.emp_cd -> LEFT OUTER JOIN m_license t3 -> ON t3.license_cd = t4.license_cd -> LEFT OUTER JOIN m_skill_lv t5 -> ON t4.skill_lv = t5.skill_lv; ERROR 1054 (42S22): Unknown column 't4.skill_lv' in 'on clause'
回答お願いします
ベストアンサー
単純なミスです。t4テーブルにskill_lvというカラムが無いというエラーです。 m_skill_lv t5を結合するのにON t4.skill_lv = t5.skill_lvと書いていますが、 スキルレベルマスタのスキルレベルとつなげる先は資格マスタのスキルレベルですよね?t4は資格取得マスタですよ。資格マスタはt3です。 ON t3.skill_lv = t5.skill_lv; このような単純なミスを防ぐためにもテーブルにつける別名はt1等のような意味のない言葉ではなく判別がつく単語にしましょう。 慣れるまでは別名を付けずにテーブル名そのままで書くのもお勧めします。 ON m_license.skill_lv = m_skill_lv.skill_lv; 慣れてくると略語で以下のように書くようになれば良いかと ON ml.skill_lv = msl.skill_lv; とにもかくにも連番のような意味不明な略語はSQLにしてもプログラミングの変数にしても使うのは避けましょう。バグが増えてしまうだけです。
ID非公開さん
質問者2022/5/6 7:11
細かくありがとうございます。解決しました。指摘された注意点もこれから意識したいと思います。
質問者からのお礼コメント
ありがとうございました。
お礼日時:5/6 7:12