2013-01-18 61 views
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 

我需要以檢索只有那些的parentid = 0使用selfjoin

由於提前數據

+3

爲什麼自我加入?如果你想用parentid = 0檢索數據,爲什麼不只是'SELECT * FROM yourtable WHERE parentId = 0'? –

+0

使用什麼標準檢索數據?你不需要自加入來僅僅選擇'parentid = 0'的記錄。 – Cozzamara

+1

你想從上面得到什麼結果? – andy

回答

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 
+0

thnx查詢 – user1947927

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 
+0

是這個查詢爲我工作 – user1947927

+0

@ user1947927:我很高興聽到這個消息。但是,Himanshu似乎有更好的查詢;) –

+0

可能只是做一個左連接來包含沒有父母的記錄 – pythonian29033

1

試試這個:

SELECT *.t1 
FROM Table1 AS t1 
JOIN Table1 t2 ON t1.id = t2.parentid AND t2.parentid = 0 
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; 

它resuls爲:

1 1 0 word 
2 1 0 excel 
4 2 0 word 
1

我認爲你正在尋找自我加入。檢查它here,我已經給出了它的解釋。

對於前:
表名:員工
領域:EMPID,EmpName,經理ID

現在,如果你想要得到誰是經理的位置爲Empolyees的細節,我們需要寫這樣的查詢:

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

希望它會幫助你。

欲瞭解更多信息,請檢查this鏈接。