次のようなクエリを使用する必要があります。
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:
------ ------
| | ID | パス |
------ ------
| | 1 | ビ |
| | 2 | ビ |
| | 3 | シー |
| | 4 | シー |
------ ------
表 B:
------ ------
| | A_id | X_id |
------ ------
| | 1 | 9 |
| | 2 | 8 |
------ ------
表 C:
------ ------
| | A_id | X_id |
------ ------
| | 3 | 7 |
| | 4 | 6 |
------ ------
表 X:
------ -------
| | ID | 値 |
------ -------
| | 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 への実際のパスであるかが確認されます。
-------- -------- -------- -------- ---------
| | A.id | 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 |
-------- -------- -------- -------- ---------
それがあなたのために働くことを願っています!