у меня 4 таблицы.Таблица не содержит ссылки foreign key
, где имя имеет тип xml
t1:
| id | name |
+-----+----------------+
| a1 | <ID>a1<ID> |
| a2 | <ID>a2<ID> |
| a3 | <ID>a3<ID> |
t2:
| id | name | t1_id |
+-----+-------------+--------------+
| b1 | <ID>b1<ID> | a1 |
| b2 | <ID>b2<ID> | a2 |
| b3 | <ID>b3<ID> | a3 |
| b4 | <ID>b4<ID> | a1 |
t3:
| id | name | t2_id |
+-----+-------------+--------------+
| c1 | <ID>c1<ID> | b1 |
| c2 | <ID>c2<ID> | b2 |
| c3 | <ID>c3<ID> | b3 |
t4:
| id | name | t3_id |
+-----+-------------+--------------+
| d1 | <ID>d1<ID> | c2 |
| d2 | <ID>d2<ID> | c3 |
Мне нужно получить все связанные данные.Когда я указываю 'a1', я ожидаю что-то вроде
| name | name | name | name |
+--------------+-------------+--------------+--------------+
| <ID>a1<ID> | <ID>b1<ID> | <ID>c1<ID> | |
| | <ID>b4<ID> | | |
Полученный результат:
| name | name | name | name |
+--------------+-------------+--------------+--------------+
| <ID>a1<ID> | <ID>b1<ID> | <ID>c1<ID> | |
| <ID>a1<ID> | <ID>b4<ID> | | |
Чтобы решить эту проблему, я использовал
SELECT DISTINCT CAST (a.name AS TEXT), CAST (b.name AS TEXT), CAST (c.name AS TEXT), CAST (d.name AS TEXT)
FROM t1 AS a
LEFT JOIN t2 AS b
ON b.id =
CAST((xpath('/ID/text()', b.name))[1] AS TEXT)
LEFT JOIN t3 AS c
ON c.id =
CAST((xpath('/ID/text()', c.name))[1] AS TEXT)
LEFT JOIN t4 AS d
ON d.id =
CAST((xpath('/ID/text()', d.name))[1] AS TEXT)
Вышене работает.Как решить это.Это оптимизированный запрос?Я пробовал вложенные запросы.Там возникает проблема Distinct
Каков наилучший и оптимизированный способ для достижения этой цели?Используя JOIN
или Nested query
?