MySQL连接从单元格中的外部表名中选择

MySQL连接从单元格中的外部表名中选择,mysql,select,join,Mysql,Select,Join,我有两个结构相同的表(还会有更多),其中有两列引用表和另一个表的主键: TABLE 1: id value exttable extid ============================= 1 val_1_1 0 0 2 val_1_2 0 0 3 NULL 2 5 4 val_1_4 0 0 5 val_1_5

我有两个结构相同的表(还会有更多),其中有两列引用表和另一个表的主键:

TABLE 1:
    id value      exttable  extid
    =============================
    1  val_1_1    0         0
    2  val_1_2    0         0
    3  NULL       2         5
    4  val_1_4    0         0
    5  val_1_5    0         0

TABLE 2:
    id value      exttable  extid
    =============================
    1  val_2_1    0         0
    2  val_2_2    0         0
    3  val_2_3    0         0
    4  val_2_4    0         0
    5  val_2_5    0         0
我想在表1上做一个选择,它读取exttableextid列的值,并引用另一个表。所以我的输出应该是这样的:

OUTPUT:
    id val
    ==========
    1  val_1_1
    2  val_1_2
    3  val_2_5
    4  val_1_4
    5  val_1_5

我知道循环引用可能会引起麻烦,但我将以另一种方式避免这种情况。

您应该将所有这些数据放在一个带有附加列的表中,我将其称为“tableid”。如果你有这个,你可以做:

select t.id,
       (case when t.exttable <> 0 then t1.value else t2.value end) as value,
       (case when t.exttable <> 0 then t1.exttable else t2.exttable end) as exttable,
       (case when t.exttable <> 0 then t1.extid else t2.extid end) as extid
from table t left outer join
     table t2
     on t.exttable = t2.tableid and
        t.extid = t2.id;

我希望这将起作用,否则需要在这个查询中进行一些小的更改。 试试这个

select * from (select id,value from TABLE 1 where value !=NULL UNION 
select TABLE 1.id,TABLE 2.value from TABLE 2,TABLE 1 where TABLE 1.value =NULL 
and TABLE 1.extid=TABLE 2.id ) as results order by id

您的目标数据集正确吗?因为这通常是一个单表,所以当您有多个具有相同列的表时,数据结构会出现问题。你应该有一个额外的“tableid”列,并将所有数据放在一个表中。是的,你是对的。在两个表上具有相同的结构是不明智的。实际上,结构不一样,但很相似,所以我简化了它,例如matters。不,这不起作用,因为表2的表名必须从单元格中读取,所以它是动态的。我将有2个以上的表,所以我不能硬编码为只有2个。
select * from (select id,value from TABLE 1 where value !=NULL UNION 
select TABLE 1.id,TABLE 2.value from TABLE 2,TABLE 1 where TABLE 1.value =NULL 
and TABLE 1.extid=TABLE 2.id ) as results order by id