表A中有一个属性,它告诉它将获得哪个表。



例如:

表A(信息)

 InfoID | Type


表B(学生)

 StudentID | Name | Course |


表C(员工)

 EmployeeID | Name | Company |




如果type = 1,则获取表B中的信息(学生)

InfoID | StudentID | Name | Course


其他在表C中获取信息(员工)

InfoID | EmployeeID| Name | Company

最佳答案

像这样:

SELECT my_columns
FROM A
LEFT JOIN B ON A.InfoID = B.InfoID and A.type=1
LEFT JOIN C ON A.InfoID = C.InfoID and A.type <> 1


对于列,您可以这样使用CASE / WHEN:

SELECT A.InfoId,
MAX(CASE A.type = 1 THEN B.StudentID ELSE C.EmployeeID END) AS 'Employee/Student Id'
MAX(CASE A.type = 1 THEN B.Name ELSE C.Name END) AS 'Name'
MAX(CASE A.type = 1 THEN B.Course ELSE C.Company END) AS 'Company/Course'
FROM A
LEFT JOIN B ON A.InfoID = B.InfoID and A.type=1
LEFT JOIN C ON A.InfoID = C.InfoID and A.type <> 1
GROUP BY A.InfoID

关于mysql - 一个表与两个不同表的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49025753/

10-16 09:21