2016-10-20 9 views
1

私は2つのテーブルを持っています。 表1(tbl_1)データベースからツリーを構築する

| ID | Name   | 
| -- | -------------| 
| 1 | Company1 | 
| -- | -------------| 
| 2 | Company2 | 
| -- | -------------| 
| 3 | Company2 | 

表2(tbl_2)今Company_2は、親会社であるAN私は次の結果を取得したいということ

| ID | Company_group | 
| -- | ------------- | 
| 1 | Company2  | 
| -- | ------------- | 
| 2 | Company2  | 
| -- | ------------- | 
| 3 | Company2  | 

私は。

| 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 

答えて

1
create table tbl_1 (ID int,Name varchar(100)); 
insert into tbl_1 (ID,Name) values (1,'Company1'),(2,'Company2'),(3,'Company3'); 

create table tbl_2 (ID int,Company_group varchar(100)); 
insert into tbl_2 (ID,Company_group) values (1,'Company2'),(2,'Company2'),(3,'Company2'); 

select  t1.ID 
      ,t1.Name 
      ,t2.Company_group as RootName 
      ,t1_b.ID    as RootId 

from     tbl_1 t1 

      join  tbl_2 t2 

      on   t2.ID = 
         t1.ID 

      join  tbl_1 t1_b 

      on   t1_b.Name = 
         t2.Company_group 

where  t1.ID <> t1_b.ID 
; 
+0

ありがとうございます。あなたのクエリは、私が待つよりも多くのレコードを返します。しかし、私の最後のクエリで返される結果が少なくなります。 – Seva

+0

@セヴァ、ようこそ。このクエリは、サンプルの正しい結果を返します。実稼働環境で望ましくない結果が得られた場合は、サンプルを変更して、実動データを正しく表すようにしてください。 –

0

あなたは、単に自分自身でテーブルを結合する必要があります。

SELECT * 
FROM Company c1 
    LEFT OUTER JOIN Company c2 ON c1.ParnetID = c2.ID 
+0

こんにちは。あなたは私を理解していない。私はデータベースにParnetIDを持っていません。私はCompany_groupだけ持っていて、それはvarcharです。私が親会社を取得する方法を参照してください。 – Seva

関連する問題