0

我需要编写一个自联接查询

我的表是:-

id locid parentid filename 

1    1      0       word 
2    1      0       excel 
3    1      1       power 
4    2      0       word 
5    2      4       power 

我只需要使用 selfjoin 检索 parentid=0 的那些数据

提前致谢

4

5 回答 5

2

我不明白为什么需要自加入,因为您可以使用WHERE-clause 获得所需的一切:

SELECT
    id, locid, parentid, filename
FROM
    dbo.YourTable
WHERE
    parentid = 0

也许您还想要父记录的所有列:

SELECT
    p.id AS ParentID, p.locid AS PlocID, p.parentid AS ParentID, p.filename AS ParentFileName,
    c.id, c.locid, c.parentid, c.filename
FROM
    dbo.YourTable p
    INNER JOIN dbo.YourTable c 
        ON p.id = c.parentid
WHERE
    c.parentid = 0
于 2013-01-18T09:19:13.967 回答
2

我用这个:

CREATE TABLE my_table(ID NUMBER, locid NUMBER, parentid NUMBER, filename VARCHAR2(10));
BEGIN

INSERT INTO my_table VALUES(1,1,0,'word');
INSERT INTO my_table VALUES(2,1,0,'excel');
INSERT INTO my_table VALUES(3,1,1,'power');
INSERT INTO my_table VALUES(4,2,0,'word');
INSERT INTO my_table VALUES(5,2,4,'power');
END;
/

通常的方法是:

SELECT * FROM my_table;

select * from my_table  where parentid=0;

SELECT  distinct t1.ID, t1.locid, t1.parentid, t1.filename FROM my_table t1
JOIN my_table t2 ON t1.parentid = t2.parentid AND t2.parentid = 0;

结果为:

1   1   0   word
2   1   0   excel
4   2   0   word
于 2013-01-18T09:32:44.560 回答
1

从您的查询中,不清楚您要使用自联接。

不管怎样,下面是一个例子,它可以让你清楚地了解自我加入。

假设员工是包含与员工相关的数据的表。员工可以是其他员工的经理,但自己可以被视为任何组织的员工。

示例:

表名:员工

EmployeeID  EmployeeName    ManagerID         
    1            A            null         
    2            B             1         
    3            C             1         
    4            D             3         
    5            E             3 

询问:

select e1.EmployeeName as Employee,
    e2.EmployeeName as ReportsTo
from employees e1 
left outer join employees e2
on e1.ManagerID  = e2.EmployeeID 
order by e1.EmployeeID 

输出将如下:

Employee  Reports To
-------- ----------- 
  B          A    
  C          A    
  D          C    
  E          C 
于 2013-01-18T09:23:26.110 回答
1

试试这个:

SELECT *.t1
FROM Table1 AS t1
JOIN Table1 t2 ON t1.id = t2.parentid AND t2.parentid = 0
于 2013-01-18T09:25:23.340 回答
1

我认为您正在寻找自我加入。在这里检查一下,我已经给出了解释。

例如:
表名:员工
字段:EmpId、EmpName、ManagerId

现在,如果您想获取处于经理职位的员工的详细信息,我们需要编写如下查询:

SELECT e1.EmpId, e1.EmpName 
FROM EmployeeDetails e1, EmployeeDetails e2 
where e1.EmpId=e2.ManagerId;

希望它会帮助你。

有关更多信息,请查看链接。

于 2013-01-18T09:41:17.263 回答