私はいくつかのクエリをストアド プロシージャにロールバックしていて、エラーが発生しました...ただし、宣言されていないと主張する変数が実際にはテーブル名であること#1327 - Undeclared variable
は奇妙なことです。
問題に取り組む
だから私はそれが落ちていたプロシージャのビットを抽出し、PHPMyAdmin を介してデータベース上で直接通常の SQL クエリとして実行しようとしました... 同じこと。いじくり回した後、別のテーブルに参加しているようです。
単一のテーブルでクエリを実行すると、次のように問題ありません。
SET @i_channel_id = 3;
SET @i_product_id = 90;
SELECT
`product_status_to_channel`.`status_code` INTO @s_status_code
FROM `product_status_to_channel`
WHERE `product_status_to_channel`.`channel_id` = @i_channel_id
AND `product_status_to_channel`.`product_id` = @i_product_id
ORDER BY IF(`product_status_to_channel`.`date` IS NULL, 1, 0) ASC,
`product_status_to_channel`.`date` DESC
LIMIT 0, 1;
SELECT @s_status_code AS status_code;
これは PHPMyAdmin
の 'LIVE'を
出力します - これは問題ありません。status_code
ただし、JOIN
関連するステータス メッセージを見つけるためにメッセージ テーブルを参照しようとすると、次のエラーが表示されます: #1327 - Undeclared variable: product_status_to_channel_lang
... but product_status_to_channel_lang
is a table?!
SET @i_channel_id = 3;
SET @i_language_id = 3;
SET @i_product_id = 90;
SELECT
`product_status_to_channel`.`status_code` INTO @s_status_code,
`product_status_to_channel_lang`.`string` INTO @s_status_message
FROM `product_status_to_channel`
LEFT JOIN `product_status_to_channel_lang`
ON `product_status_to_channel`.`product_status_to_channel_id` = `product_status_to_channel_lang`.`product_status_to_channel_id`
AND `product_status_to_channel_lang`.`language_id` = @i_language_id
WHERE `product_status_to_channel`.`channel_id` = @i_channel_id
AND `product_status_to_channel`.`product_id` = @i_product_id
ORDER BY IF(`product_status_to_channel`.`date` IS NULL, 1, 0) ASC, `product_status_to_channel`.`date` DESC
LIMIT 0, 1;
SELECT @s_status_code AS status_code, @s_status_message AS status_message;
product_status_to_channel_lang.product_status_to_channel_id
JOIN で変数として
評価しようとしていますか?
LEFT JOIN `product_status_to_channel_lang`
ON `product_status_to_channel`.`product_status_to_channel_id` = `product_status_to_channel_lang`.`product_status_to_channel_id`
私は明らかな何かを見落としていると思いますか?
私は両方でこれを試しました:
- MySQL 5.5.27 で xampp を実行する Win7 ボックス - MySQL Community Server (GPL)
- MySQL 5.1.73-1-log を実行する Debian ボックス - (Debian)