我需要寫一個自聯接查詢如何在桌子上自我加入。
我的表是: -
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
由於提前數據
我需要寫一個自聯接查詢如何在桌子上自我加入。
我的表是: -
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
由於提前數據
從查詢其並不清楚在此基礎上做ü要使用自聯接。
無論如何,下面是一個例子,它會給你一個關於自我加入的清晰畫面。
假設員工是包含與員工相關數據的表。 員工可以成爲其他員工的經理,但單身本身可以被視爲任何組織的員工。
〔實施例:
表名:員工
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
thnx查詢 – user1947927
我不明白你爲什麼需要一個自加入,因爲你可以得到所有你需要的一個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
是這個查詢爲我工作 – user1947927
@ user1947927:我很高興聽到這個消息。但是,Himanshu似乎有更好的查詢;) –
可能只是做一個左連接來包含沒有父母的記錄 – pythonian29033
試試這個:
SELECT *.t1
FROM Table1 AS t1
JOIN Table1 t2 ON t1.id = t2.parentid AND t2.parentid = 0
我用這個:
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
爲什麼自我加入?如果你想用parentid = 0檢索數據,爲什麼不只是'SELECT * FROM yourtable WHERE parentId = 0'? –
使用什麼標準檢索數據?你不需要自加入來僅僅選擇'parentid = 0'的記錄。 – Cozzamara
你想從上面得到什麼結果? – andy