鍍金池/ 問答/Java  數(shù)據(jù)庫/ mysql是否可以實(shí)現(xiàn)動(dòng)態(tài)join另外一張表?

mysql是否可以實(shí)現(xiàn)動(dòng)態(tài)join另外一張表?

class字段:id, class_name, student_id
1_student、2_student、3_student...依次類推
表*_student與表class通過student_id相關(guān)聯(lián),如:
若表class的student_id=1 則應(yīng)該select * from class left join 1_student on...
若表class的student_id=2 則應(yīng)該select * from class left join 2_student on...
若表class的student_id=3 則應(yīng)該select * from class left join 3_student on...
...
*_student的數(shù)量和*的值是不確定的,
是否可以根據(jù)表class的字段student_id的值動(dòng)態(tài)join對(duì)應(yīng)的表?
實(shí)現(xiàn)如下的效果:
select * from class c left join {c.student_id}+'_student' on ...

回答
編輯回答
近義詞

可以
把表名作為參數(shù)

2017年5月12日 05:35
編輯回答
貓館

想辦法得到一個(gè)所有*_student表的union,叫students,然后再去和class連接。像這樣:

with students as (
    select 1 as student_id, * from 1_student union all
    select 2 as student_id, * from 2_student),
    
select *
from class left join students on 
    class.student_id = students.student_id

至于怎么得到students,要么寫很多行(比如知道student_id < 10)保證所有student_id都能覆蓋到,要么就根據(jù)max(class.student_id)用動(dòng)態(tài)SQL生成吧。

2017年3月25日 06:10
編輯回答
何蘇葉

用儲(chǔ)存過程,拼接字符串,然后執(zhí)行字符串。
參考http://blog.csdn.net/xinyuan_...

2017年7月2日 11:20
編輯回答
命多硬

這個(gè)一般是做不到的吧,沒見過這種用法

2017年10月6日 05:56
編輯回答
青瓷

這種情況不用做表關(guān)聯(lián)了吧

查詢出class的記錄后,每條循環(huán)處理,根據(jù)student_id生成動(dòng)態(tài)sql語句,查詢*_student表的內(nèi)容。

2018年8月2日 13:55