动态连接MySQL表
我正在编写一个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 -
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获取数据,将其放入临时表中并选择它。这个很好用。