1

さて、私が尋ねた最後の質問に基づいて、Mysqlは次のコードのwhereステートメントをどのように処理しますか?

DELIMITER ;//
DROP PROCEDURE IF EXISTS `test`;//
CREATE PROCEDURE `test`
(
  id INT
)
BEGIN
  SELECT *
    FROM some_table
   WHERE id = id;
END;//

この場合、MySQLは何をしますか?where句を次のように扱いますか

some_table.id = id

またはそれはそれを次のように扱いますか

some_table.id = some_table.id 

今私は次のようなことをしています

WHERE id = @id

MySQLにセッション変数があることを知らなかったので、文句を言わず、「この列がこの変数と等しい場所」という明示的な言い方だと思いました。

「もちろん、それは列=変数として扱われる」と言う人もいるかもしれませんが、「変数=列」とは簡単に言うことができます。では、これをどのように処理しますか?

4

2 に答える 2

0

@は、テーブルの列を参照するのではなく、プロシージャ内の変数であることを示していると確信しています。、という名前のテーブル列は1つしかないidため、この場合は明確です。結合を行っている場合は、接頭辞を付ける必要があります。

select *
from table1, table2
where table1.id = @id
and table2.some_field = table1.id

それがどこにあるかは関係ありません。このクエリのように、変数には常に@プレフィックスが必要です。

select id, @id
from table1

最初のIDは明確なテーブル列table1.idであり、@idはストアドプロシージャ変数を参照します。

于 2009-06-18T02:00:38.377 に答える