アプリ版:「スタンプのみでお礼する」機能のリリースについて

mySQLのストアドプロシージャにて、以下のようなコードを用いています。

SELECT * from `db`.`table` where `criteria` = criteria;

この時、期待と異って`db`.`table`の全レコードが返されます。
しかし、where句にて条件を`table`.`criteria`のようにテーブル名を含めて
指定すると期待通りに抽出された結果が得られます。

なぜ、カラム名と変数名が同一だと、このような結果になるのでしょうか。
バッククオートにより`criteria`がカラム名だと明示されている筈です。
また、テーブル名を含めた指定だと期待通りの結果になる理由も分かりません。
仕組みをしっかり理解したいので、ご教示頂けますと幸いです。

ところで、対象をテーブル名やデータベース名を含めて記載すること(パスで言うところのフルパス)は何というのでしょうか?
こちらもご存知でしたら、ご教示願います。

A 回答 (1件)

普通に考えて



→プロシージャでは変数名を``で囲める
→変数名とカラム名が競合したときは、変数名が優先される
→テーブル名.カラム名で参照すればカラム名だと明示されるのでカラム名のまま参照できる

という認識でよいのでは?

たとえばプロシージャ内で
SELECT `table`.`criteria`,`criteria`,criteria from `db`.`table`;
として結果をみると、最初のcriteriaはカラムとして扱われますが残りの2つは
変数を引っ張ってきます
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!