我有一个如下表格,其中包含requestID和PrimaryRequestID之间的关系:
RequestID PrimaryRequestID Prefix
-----------------------------------------------------------
1 NULL MyPrefix
2 1 NULL
我想要做的是加入这个,所以我得到以下输出:
1 NULL MyPrefix
2 1 MyPrefix
我已经尝试了几个连接,但我仍然以NULL前缀结束。
编辑:这可能和我一样接近:
SELECT
ra.RequestID
,CASE WHEN rb.Prefix IS NULL THEN ra.Prefix ELSE ra.Prefix END AS Prefix
FROM requests ra
LEFT JOIN requests rb on ra.RequestID = rb.PrimaryRequestID
答案 0 :(得分:2)
这样的事可能会成功
测试数据
DECLARE @tbl TABLE (RequestID INT,PrimaryRequestID INT,Prefix VARCHAR(100))
INSERT INTO @tbl
VALUES
(1,NULL,'MyPrefix'),
(2,1,NULL)
查询
;WITH CTE(RequestID,PrimaryRequestID,Prefix)
AS
(
SELECT
tbl.RequestID,
tbl.PrimaryRequestID,
tbl.Prefix
FROM
@tbl AS tbl
WHERE
tbl.PrimaryRequestID IS NULL
UNION ALL
SELECT
tbl.RequestID,
tbl.PrimaryRequestID,
CTE.Prefix
FROM
@tbl AS tbl
JOIN CTE
ON tbl.PrimaryRequestID=CTE.RequestID
)
SELECT
*
FROM
CTE
我正在使用递归cte函数阅读更多关于here
的信息如果您的表中还有一行代码。所以你的桌子是这样的:
1 NULL MyPrefix
2 1 NULL
3 2 NULL
然后输出仍然是这样的:
1 NULL MyPrefix
2 1 MyPrefix
3 2 MyPrefix
因为我正在使用表中的父子关系。
答案 1 :(得分:1)
尝试:
select S.RequestId, S.PrimaryRequestID, coalesce(P.Prefix, S.Prefix) As Prefix
from myTable P
right join myTable S on P.RequestID = S.PrimaryRequestID
答案 2 :(得分:0)
select c.requestID,
c.primaryRequestID,
isnull(c.Prefix, p.Prefix)
from table p,
table c
where c.primaryRequestID *= p.RequestID
为古老的连接语法道歉......