sql文でエラーがでており解決方法が本当にわかりません。
SQLSTATE[HY000]: General error: 1100 Table 'gd' was not locked with LOCK TABLES
SELECT gsd.`SHOP_CD` FROM `table1` gd LEFT JOIN `table2` gsd ON gd.`COMMON_ID` = gsd.`COMMON_ID` WHERE gd.`IMPORT_FLG` = 0 GROUP BY gsd.`SHOP_CD`
これをクライアントソフトでやるとエラーなくアクセスできますが、
phpに組み込んでやると上記のエラーになります。
table1とtable2は
$sql = 'LOCK TABLES '.implode('
WRITE, ', $lck_tbl).'
WRITE';
でロック対象テーブルに入ってますが、
現場での話なのですが、既存のコードがあって、その既存のコードでは今まで動いてました。
その既存のコードというのが
php batch.php --mode a
で動く処理で、既存のコードではテーブルロックしてからロックしているテーブルをSELECTしているのですが
php batch.php --mode a
で間違いなくそこの処理は通っていて冒頭のようなエラーはでていません。
新規モードを作ることになり、
php batch.php --mode bで動く処理を作っています。
ほとんどコードも同じで、処理は全く同じです。
冒頭のSELECT文で説明すると
これまでは、table1にもtable2にもSHOP_CDがあり、COMMON_IDもありました。
しかし、仕様が変わり、table1にはSHOP_CDはなくなりCOMMON_IDだけがある状態。table2にはSHOP_CDもCOMMON_IDもあります。
そのため既存のコードと違うところはJOINしてるところぐらいです。
原因と解決方法としてなにが考えられるでしょうか?
*追記
exitなど通して色々やってみて1つわかったことがあります。
joinをせずにテーブル単体でSELECTしても同じエラーでした。
今度は
joinをせずに
table1 tb1のように別名をつけずに
テーブル単体でSELECTするとエラーはなくなりました。
しかし、これではjoinできません。
どうすればよいでしょうか?
回答1件
あなたの回答
tips
プレビュー