下限值我們有我們的SQL Server 2012的查詢,選擇和最高相結合,從表中
表A(數據)以下表格:
ID, Description
---------------
1 , Bla 1
2 , Bla 2
3 , Bla 3
表P中(數據):
ID, ParentID, Name
------------------
1 , NULL , AAA
2 , 3 , CCC
3 , 1 , XXX
表X(外鍵A_ID到A.ID和P_ID到P.ID):
ID, A_ID, P_ID
--------------
1 , 1 , 1
2 , 1 , 2
3 , 2 , 1
4 , 2 , 2
5 , 2 , 3
6 , 3 , 1
問題:
我們需要一個查詢是這樣的:
SELECT ...
WHERE A_ID = 1
應該返回這個結果:
ID, Name, Subname
-----------------
2 , AAA , CCC
- 名稱需要包含來自表P的最高名稱,即沒有ParentID的名稱。
- 子表名稱需要包含表P中最底部的名稱,表中ID仍然存在於表X.
- ID需要包含來自表X的ID,其中P_ID是最底層子代的ID。
又如:
SELECT ...
WHERE A_ID = 2
應該返回這樣的結果:
ID, Name, Subname
-----------------
4 , AAA , CCC
而且
SELECT ...
WHERE A_ID = 3
應該返回這樣的結果:
ID, Name, Subname
-----------------
6 , AAA , NULL
我們已經嘗試了各種查詢,但有些僅適用於'where A_ID = 1'而不適用於'where A_ID = 2'。爲了從P中選擇最低級別的孩子,我們查看了'How to select lowest level in hierarchy form table帖子',這對於我們正在查找的查詢可能會派上用場。
單個查詢會很好,但我們也會接受存儲過程。
提前致謝!
信息
- 所有表中的ID列是主鍵
- 在任何給定表中的ID的列可以被改變爲在採樣數據的任何其它值,考慮到初級而和外鍵約束。 (例如,將P.ID'2'更改爲'4'也會導致X.P_ID的'2'更改爲'4'。)這表明ID不一定按順序排列。
- P.Name列中的值可以是任何非空值。
- 表P可以有多個ParentId設置爲null的行。
樣本數據 從@NEER
DECLARE @A TABLE (ID INT, DESCRIPTION NVARCHAR(10))
INSERT INTO @A
VALUES
(1 , 'Bla 1'),
(2 , 'Bla 2'),
(3 , 'Bla 3')
DECLARE @P TABLE (ID INT, ParentID INT, Name NVARCHAR(10))
INSERT INTO @P
VALUES
(1 , NULL , 'AAA'),
(2 , 3 , 'CCC'),
(3 , 1 , 'XXX')
DECLARE @X TABLE (ID INT,A_ID INT,P_ID INT)
INSERT INTO @X
VALUES
(1 , 1 , 1),
(2 , 1 , 2),
(3 , 2 , 1),
(4 , 2 , 2),
(5 , 2 , 3),
(6 , 3 , 1)
你能提供你試過的查詢嗎? –
你正在使用哪個dbms?將它添加到標籤! – Nebi
顯示您嘗試的查詢以及結果有什麼問題,以便我們可以幫助進行調試。 –