У меня есть две таблицы. Таблица 1. (tbl_1)Построение дерева из базы данных
| ID | Name |
| -- | -------------|
| 1 | Company1 |
| -- | -------------|
| 2 | Company2 |
| -- | -------------|
| 3 | Company2 |
Таблица 2. (tbl_2)
| ID | Company_group |
| -- | ------------- |
| 1 | Company2 |
| -- | ------------- |
| 2 | Company2 |
| -- | ------------- |
| 3 | Company2 |
Я теперь Company_2 является материнской компанией я хочу, чтобы получить следующий результат.
| ID | Name | RootName | RootId |
| -- | -------------| --------- | ------ |
| 1 | Company1 | Company2 | 2 |
| -- | -------------| ----------|--------|
| 3 | Company3 | Company2 | 2 |
Я не знаю parentId. Но я могу выбрать все материнские компании с последующим запросом:
SELECT DISTINCT id parentId,
name parent_name FROM tbl_1 WHERE name in (
SELECT DISTINCT
Company_group
FROM tbl_2)
Как я могу построить дерево для этой иерархии? Я не могу думать, пожалуйста, помогите.
Это странная архитектура для этого случая, но архитектор базы данных не я.
Также я написал запрос, но он работает неправильно. Он возвращает больше записей.
SELECT ac.id_c parentId, acc.id, ac.Company_group parent_name
FROM tbl_2 ac
JOIN tbl_2 acc
ON ac.Company_group = acc.Company_group
AND ac.id in (
SELECT DISTINCT id parentId
FROM tbl_1 WHERE name in (
SELECT DISTINCT
id parentId
FROM tbl_2)
)
WHERE ac.Company_group iS NOT NULL AND acc.id IS NOT NULL
and ac.id <> acc.id
ORDER BY ac.Company_group
Спасибо. Ваш запрос также возвращает больше записей, чем я жду. Но результат меньше, чем возвращается в моем последнем запросе. – Seva
@ Сева, пожалуйста. этот запрос возвращает правильные результаты для вашего образца. Если вы получаете нежелательные результаты в производстве, пожалуйста, измените образец, чтобы он правильно отображал производственные данные. –