+------------------+ +------------------+
| object | | example |
+------------------+ +------------------+
| id | | id |
| table_name | | ... |
| ref_id | | |
+------------------+ +------------------+
object [ id = 5, table_name = example, ref_id = 2]
example [ id = 2 ]
いくつかの異なるテーブルから発生したオブジェクトのグループを表すことができるテーブルがあります。これらのオブジェクトはすべて、id
によって参照される、を持っていobject.ref_id
ます。
object.table_name
によって(によって参照されるテーブルから)元のオブジェクトを選択しようとしていますobject.id
。このために、私は次のSQLクエリを使用しようとしています。これは結果になりますが#1054 - Unknown column 'entity.id' in 'where clause'
。
SELECT *
FROM (
SELECT table_name
FROM object
WHERE id = 5) AS entity
WHERE entity.id = (
SELECT ref_id
FROM object
WHERE id = 5)
私は何が間違っているのですか?
事例
SELECT *
FROM example
WHERE id = (
SELECT ref_id
FROM object
WHERE id = 5 )
ただし、私の場合、FROM句は例のように簡単ではありません。これは、この値は通常、から派生しているためobject.table_name
です。
TOMBOMのアプローチで更新
Tombomのソリューションを使用するとエラーが発生します。テストのために、CONCAT関数の変数を置き換えました。
SET @sql = CONCAT('SELECT * FROM ', 'example', ' WHERE id = ', '1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
#1243-EXECUTEに指定された不明なプリペアドステートメントハンドラー(stmt)