2

我有两张桌子,一张有 ID 和 NAME

表格1

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

以及带有 ID 和 PARENT ID 的 XREF 表

表2

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

我想像这样检索 NAME 两次: NAME | 父母名字

如果可以深入三层但使用相同的 2 列表,如下所示:

结果表

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

...那我也想弄清楚。

4

2 回答 2

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 行。如果您想拥有第一行(对于 ID=1),您只需要outer join改为。

于 2012-06-14T21:53:54.270 回答
1

考虑将parentid第一个表作为自引用关系而不是单独的表。

前任。:

表格1

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

这样,您只需要自行加入表,而不是通过第三张表。(这是假设 table1 中的行只能有一个父级,而您的设计允许一行一次有多个父级

但是对于您的表结构,这将起作用:

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

但是如果你在同一个表中创建了 parentid 引用 id,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 回答