动态连接MySQL表

动态连接MySQL表,mysql,join,stored-procedures,Mysql,Join,Stored Procedures,我正在编写一个MySQL存储过程,它必须将一个基表与其他表连接起来。 要联接的其他表取决于基表中的字段 这是基本表: ID - Value - JoinValue - TableToJoin - FieldToJoin --------------------------------------------------- 1 - Test - aa - tbl_test1 - test1field 2 - Test2 - bb - tbl_test2 -

我正在编写一个MySQL存储过程,它必须将一个基表与其他表连接起来。 要联接的其他表取决于基表中的字段

这是基本表:

ID - Value - JoinValue - TableToJoin - FieldToJoin
---------------------------------------------------
 1 - Test  - aa        - tbl_test1   - test1field
 2 - Test2 - bb        - tbl_test2   - test2field
作为输出,我想要:

ID - Value - ValueFromOtherTable
----------------------------------------------
aa  - Test  - ValueFromTBL_TEST1Field
bb  - Test2 - ValueFromTBL_TEST2Field
这有可能吗? 也许有点像这样

SELECT
 ID,
 Value,
 (SELECT @FieldToJoin FROM @TableToJoin AS t WHERE t.ID = @JoinValue) AS ValueFromOtherTable
FROM tbl_base;
我已经尝试过某种形式的加入,但不幸的是我找不到答案


您好,xola这种设计通常是个坏主意,您不能以自己的思维方式动态选择要加入的表,但可以用一种粗糙而粗暴的方式

SELECT stuff 
   , COALESCE(t2.something, t3.something, ....) AS otherTsomething
FROM t1
LEFT JOIN t2 ON t1.TableToJoin = "t2" 
   AND t1.JoinValue = CASE t1.FieldToJoin WHEN "a" THEN t2.a WHEN "b" THEN t2.b .... END
LEFT JOIN t3 ON t1.TableToJoin = "t3" 
   AND t1.JoinValue = CASE t1.FieldToJoin WHEN "a" THEN t3.a WHEN "b" THEN t3.b .... END
;
通常,这类数据的适当设计是有t2和t3参考t1,然后它简单地变成

SELECT stuff, COALESCE(t2.something, t3.something, ...) AS otherSomething
FROM t1
LEFT JOIN t2 ON t1.id = t2.t1_id
LEFT JOIN t3 ON t1.id = t3.t1_id
;

出于您的目的,这在某种程度上假定只有一个t2或t3与t1记录相关;但这将很难实施,而且在一般情况下并不存在问题。

寻找mysql准备好的声明注意,这种情况有时是糟糕的表现design@nbk准备好的语句对动态表和字段名没有帮助,在查询中,这实际上需要根据行的不同而有所不同。我仍然会构建一个通过基本选项卡的循环的过程,并使用prepareed statement获取数据,将其放入临时表中并选择它。这个很好用。