您应该使用这样的查询:
SELECT X.*
FROM A
LEFT JOIN B ON B.A_id = A.id
LEFT JOIN C ON C.A_id = A.id
LEFT JOIN X ON X.id = IF(A.path = 'B', B.X_id, C.X_id)
WHERE A.id = <numeric_id>;
我用这些数据在 MySQL 上测试了这个查询:
表 A:
------ ------
| 编号 | 路径 |
------ ------
| 1 | 乙|
| 2 | 乙|
| 3 | C |
| 4 | C |
------ ------
表 B:
------ ------
| A_id | X_id |
------ ------
| 1 | 9 |
| 2 | 8 |
------ ------
表 C:
------ ------
| A_id | X_id |
------ ------
| 3 | 7 |
| 4 | 6 |
------ ------
表十:
------ ------
| 编号 | 价值 |
------ ------
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
| 6 | 60 |
| 7 | 70 |
| 8 | 80 |
| 9 | 90 |
------ ------
如果您删除 WHERE 子句和 SELECT A.id, B.X_id, C.X_id, X.* 您将得到以下结果,它确认哪个表是 X 的实际路径:
-------- -------- -------- -------- ---------
| 身份证 | B.X_id | C.X_id | X.id | X.值 |
------ ------ ------ ------ -------- ---------
| 1 | 9 | 空 | 9 | 90 |
| 2 | 8 | 空 | 8 | 80 |
| 3 | 空 | 7 | 7 | 70 |
| 4 | 空 | 6 | 6 | 60 |
-------- -------- -------- -------- ---------
希望对你有帮助!