来自TABLE的mySQL SELECT值,其中TABLE名称基于字段值

时间:2018-06-07 13:34:20

标签: mysql

这是我的表格的简化版本。

[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

stock_adjust 包含 batch_table_name 列中正确批处理表的名称,该列可以是“ingredient_batch”,“product_batch”或“packaging_batch”。我需要从每个条目的正确批处理表中获取值。伪代码看起来如下所示:

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

我试图尽可能地简化描述和表格,希望我没有过多地简化它并且上面有意义吗?

我发现以下类似问题有几个问题,但它们要么在这种情况下无法正常工作,要么我没有正确理解这个问题。

2 个答案:

答案 0 :(得分:1)

虽然我建议更新您的数据库架构,但这里有一种方法可以为您提供适合您的方案:

public class DemoActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    am = (AudioManager) getActivity().getBaseContext().getSystemService(Context.AUDIO_SERVICE);

    Intent i = this.getActivity().getIntent();
    int info = this.getActivity().getIntent().getIntExtra("mode", 0);
    if (info == 0) {
        AlertDemo alert = new AlertDemo();

        /** Opening the Alert Dialog Window */
        alert.show(getSupportFragmentManager(), "AlertDemo");
    } else
        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}

答案 1 :(得分:0)

也许dynamic query可能是解决方案。请检查此回答SELECT * FROM @variable