2

IDとNAMEを持つ2つのテーブルがあります

表1

ID | NAME
1  | first
2  | second
3  | third

ID と PARENT ID を持つ XREF テーブル

テーブル2

ID | PARENT ID
1  | 0
2  | 1
3  | 2

そして、次のように NAME を 2 回取得したいと思います。親の名前

次のような同じ 2 列のテーブルを使用して、3 レベルの深さまで進むことができる場合:

結果表

NAME   | PARENT NAME
first  | NULL or EMPTY or this line the not showing at all
second | first
third  | second

……それなら私も考えてみたい。

4

2 に答える 2

1

parentidを別のテーブルにするのではなく、自己参照関係として最初のテーブルに配置することを検討してください。

元。:

表1

ID  |  PARENTID  |  NAME
---------------------------
1      NULL         first
2      1            second
3      2            third

そうすれば、3 番目のテーブルを通過するのではなく、テーブル自体に参加するだけで済みます。(ただし、これは table1 の行が単一の親しか持てないことを前提としていますが、設計では 1 つの行が一度に複数の親を持つことができます)

ただし、テーブル構造の場合、これは機能します。

SELECT
    a.name,
    c.name AS 'PARENT NAME'
FROM
    table1 a
LEFT JOIN
    table2 b ON a.id = b.id
LEFT JOIN
    table1 c ON b.parentid = c.id

しかし、id を参照する同じテーブルで parentid を作成した場合、SQL は次のように縮小されます。

SELECT
    a.name,
    b.name AS 'PARENT NAME'
FROM
    table1 a
LEFT JOIN
    table2 b ON a.parentid = b.id
于 2012-06-14T21:59:51.783 に答える
1
select t1.Name, t12.Name from
table1 t1 
inner join table2 t2 on t1.ID = t2.ID 
inner join table1 t12 on t2.ParentID = t12.ID

これは 2 行のみを返します。outer join最初の行 (ID=1 の場合) が必要な場合は、代わりに必要です。

于 2012-06-14T21:53:54.270 に答える