使用column作为concat的表连接

ccrfmcuu  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(317)

我一直在尝试联接另一个表,该表的名称与另一个表的列中的值匹配。
如果我将表名硬编码为匹配的表 __gun 它工作得很好,但我不能得到col值要使用+concat下划线开始。
问题在于 left join 在这里: left join CONCAT('__', b.related_table) c on b.related_id = c.id 我需要在联接中使用相关的表列。在它前面加上。
尝试:

SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join CONCAT('__', b.related_table) c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id

SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join '__'+b.related_table c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id

SELECT a.*, c.*, b.equipable, b.related_table FROM inventory a
        inner join items b on a.item_id = b.id
        left join "__"+Cast(b.related_table as nvarchar(4000)) c on b.related_id = c.id
        WHERE 1=1
        and a.id = :inventory_id
        and a.user_id = :user_id


谢谢你考虑我的问题

ktca8awb

ktca8awb1#

您可以使用准备好的语句或动态sql来实现这一点。遵循以下步骤:
使用set作为表名。
使用concat获取所需的表名。
为步骤1中创建的表准备语句。
执行语句。
释放prepare以释放prepared语句。

ycl3bljg

ycl3bljg2#

不能构造表名。
计划a:重新思考模式。有多个“相同”的表通常是不好的设计。
计划b:编写一个使用 CONCAT , PREPARE , EXECUTE ,和 DEALLOCATE_PREPARE 生成并运行查询。

相关问题