SQL - извлечение связанных данных из нескольких таблиц - PullRequest
0 голосов
/ 17 декабря 2018

у меня 4 таблицы.Таблица не содержит foreign key ссылки

t1:

| id  | name           |
+-----+----------------+
| a1  | cheese         |
| a2  | butter         |
| a3  | milk           |

t2:

| id  | name        |   t1_id      |
+-----+-------------+--------------+
| b1  | item1       | a1           |
| b2  | item2       | a2           |
| b3  | item3       | a3           |

t3:

| id  | name        |   t2_id      |
+-----+-------------+--------------+
| c1  | item4       | b1           |
| c2  | item5       | b2           |
| c3  | item6       | b3           |

t4:

| id  | name        |   t3_id      |
+-----+-------------+--------------+
| d1  | item7       | c2           |
| d2  | item8       | c3           |

Мне нужно получить все связанные данные.

Когда я указываю 'a1', я ожидаю что-то как,

| name     | name        |   name       |   name       |
+----------+-------------+--------------+--------------+
| cheese   | item1       |item4         |              |

Я использовал следующий запрос,

SELECT a.name, b.name, c.name, d.name FROM t1 AS a 
INNER JOIN t2 AS b ON b.id = c.id 
INNER JOIN t3 AS c ON c.id = b.id 
INNER JOIN t4 AS d ON d.id = c.id;

Это не приводит к получению результата, как INNER JOIN t4 AS d ON d.id = c.idне имеют соответствующего значения.

Как вернуть промежуточный результат?Оптимизирован ли этот запрос (или) я должен написать отдельные запросы для получения этого?Как этого добиться?

1 Ответ

0 голосов
/ 17 декабря 2018

Вы просто хотите left join с?

SELECT a.name, b.name, c.name, d.name
FROM t1 AS a LEFT JOIN
     t2 AS b
     ON b.id = c.id LEFT JOIN
     t3 AS c
     ON c.id = b.id LEFT JOIN
     t4 AS d
     ON d.id = c.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...