mysql从表名基于字段值的表中选择值

m3eecexj  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(321)

以下是我的表格的简化版本。

[stock_adjust]
id
batch_table_name
batch_id
adjustment_reason
qty

[ingredient_batch]
id
batch_name
...lots of other columns

[product_batch]
id
batch_name
...lots of other columns

[packaging_batch 
id
batch_name
...lots of other columns

库存调整在“批次表名称”列中包含正确批次表的名称,该名称将是“配料批次”、“产品批次”或“ Package 批次”。我需要从正确的批处理表中获取每个条目的值。这方面的伪代码如下所示:

SELECT sa.id, sa.adjustment_reason, sa.qty, batch.batch_name 
FROM stock_adjust AS sa, [sa.batch_table_name] AS batch
WHERE sa.batch_id=batch.id

我已经尽可能地简化了描述和表格,希望我没有把它简化得太多,上面的内容有意义吗?
我发现了几个与以下类似问题有关的问题,但它们要么在这种情况下不能正常工作,要么我没有正确理解这个问题。

ymzxtsji

ymzxtsji1#

梅比a dynamic query 可能是解决办法。勾选这个答案,从@variable中选择*

blmhpbnm

blmhpbnm2#

虽然我建议您更新数据库模式,但以下是一种适合您的场景的方法:

select sa.id, b.batch_name
from stock_adjust sa join (
  select id, batch_name, 'ingredient_batch' table_name from ingredient_batch
  union all
  select id, batch_name, 'product_branch' table_name from product_branch
  union all
  select id, batch_name, 'packaging_batch' table_name from packaging_batch
  ) b on sa.batch_table_id = b.id and b.table_name = sa.batch_table_name

sql fiddle演示

相关问题