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

私はこれを使用しました:

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 に答える
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 に答える
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 に答える
1

あなたのクエリからは、どの自己結合を使用したいかに基づいて明確ではありません。

とにかく、以下は、自己結合について明確な図を示す一例です。

Employees が、従業員に関連するデータを含むテーブルであるとします。従業員は他の従業員のマネージャーになることができますが、独身者自体はあらゆる組織の従業員と見なされます。

例:

TableName : 従業員

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 に答える