2016-07-29 15 views
0

Ich habe eine Tabelle wie folgt aus:T-SQL, Query mit Eltern ID

enter image description here

Ich möchte eine Abfrage wie folgt schreiben: Wenn ich DictID wählen, wo DictParentID NULL ist (was bedeutet das Elternteil ID), ich möchte alle DictID mit DictParentID = meine DictID (in diesem Fall 10240) und auch 10240 auflisten. In anderen Fällen (wenn ich DictID wähle, wenn DictParentID nicht NULL ist) möchte ich nur diese DictID auflisten.

Ich habe ein Problem mit dieser Abfrage schreiben. Dank

Antwort

1

Einfach und effizient verwenden UNION ALL:

SELECT DictiId, DictParentId 
FROM dbo.TableName t 
WHERE DictId = @DictId 

UNION ALL 

SELECT DictiId, DictParentId 
FROM dbo.TableName t 
WHERE DictParentId = @DictId 

Wenn Sie es bestellen möchten Sie eine Unterabfrage verwenden können:

SELECT x.DictiId, x.DictParentId FROM 
(
    SELECT DictiId, DictParentId 
    FROM dbo.TableName t 
    WHERE DictId = @DictId 

    UNION ALL 

    SELECT DictiId, DictParentId 
    FROM dbo.TableName t 
    WHERE DictParentId = @DictId 
) x 
ORDER BY x.DictiId, x.DictParentId 
+0

toll, toll. Danke, Mann!! – user3688227

0

Einfach und effizient verwenden OR:

SELECT 
    DictiId, DictParentId 
FROM 
    dbo.TableName t 
WHERE 
    DictId = @DictId OR 
    DictParentId = @DictId 
0

Sie können unseren guten Freund die in Klausel für umdrehen guter Effekt hier:

SELECT DictiId, DictParentId 
FROM dbo.TableName t 
WHERE @DictId in (DictId, DictParentId); 
Verwandte Themen