我正在编写一个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;
已经尝试过某种 JOIN,但不幸的是我找不到答案。
你好,索拉
最佳答案
这种设计通常是一个坏主意,你不能按照你的想法动态选择要加入的表,但它可以通过一种粗略的、相当暴力的方式来完成......
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 - 动态连接 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774104/