有没有办法在查询中使表名动态化?

JD *_*cks 2 php mysql

我正在尝试为产品创建一个Class-Inheritance设计.

基表包含所有常用字段.然后,对于每种产品类型,都有一个单独的表,其中包含仅适用于该产品类型的字段

因此,为了获得产品的所有数据,我需要JOIN在基表中使用与基表中product_type列出的相关的任何表.有没有办法动态地在表上进行此查询连接?

这是一个试图说明我想要做的事情的查询:

SELECT * FROM product_base b
INNER JOIN <value of b.product_type> t
    ON b.product_base_id = t.product_base_id 
WHERE b.product_base_id = :base_id
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Bil*_*win 9

不,没有办法做到这一点.解析查询时必须知道表名,因此解析器可以判断表是否存在,并且它包含您引用的列.此外,优化器需要知道表及其索引,因此它可以提出要使用的索引的计划.

您要求的是根据逐行找到的数据在执行期间确定表.RDBMS无法在分析时知道所有数据值都与真实表相对应.

你没有理由这样做来实现类表继承.CTI支持表之间的真正引用.

您将描述多态关联的反模式.