我一直在尝试联接另一个表,该表的名称与另一个表的列中的值匹配。
如果我将表名硬编码到__gun
之类的匹配表中,则可以正常工作,但我无法获得要使用的col值+ concat下划线开头。
问题出在这里的left join
:
left join CONCAT('__', b.related_table) c on b.related_id = c.id
我需要在连接中使用related_table列。加上__。
尝试:
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
感谢您考虑我的问题
答案 0 :(得分:0)
您不能构造表名。
计划A:重新考虑架构。具有多个“相同”表通常是通常的糟糕设计。
计划B:编写一个存储过程,该存储过程使用CONCAT
,PREPARE
,EXECUTE
和DEALLOCATE_PREPARE
来构建和运行查询。
答案 1 :(得分:0)
您可以使用Prepared Statements进行此操作,也可以说动态SQL。请按照下列步骤操作: