我一直在尝试联接另一个表,该表的名称与另一个表的列中的值匹配。
如果我将表名硬编码为匹配的表 __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
谢谢你考虑我的问题
2条答案
按热度按时间ktca8awb1#
您可以使用准备好的语句或动态sql来实现这一点。遵循以下步骤:
使用set作为表名。
使用concat获取所需的表名。
为步骤1中创建的表准备语句。
执行语句。
释放prepare以释放prepared语句。
ycl3bljg2#
不能构造表名。
计划a:重新思考模式。有多个“相同”的表通常是不好的设计。
计划b:编写一个使用
CONCAT
,PREPARE
,EXECUTE
,和DEALLOCATE_PREPARE
生成并运行查询。