我有自己的插入脚本如下表:如何使有条件的SQL加入
DECLARE @A TABLE
(
[ID] INT IDENTITY,
[SID] INT
)
DECLARE @EP TABLE
(
[SID] INT ,
[RID] INT ,
[HR] INT
)
DECLARE @XR TABLE
(
[SID] INT ,
[RID] INT ,
[UID] INT
)
DECLARE @SR TABLE
(
[RID] INT ,
[RNAME] VARCHAR(10),
[SID] INT
)
INSERT INTO @A
SELECT 1 UNION
SELECT 2
INSERT INTO @EP
SELECT 1, 1, 1 UNION
SELECT 1, 2, 1 UNION
SELECT 1, 3, 1 UNION
SELECT 2, 4, 1 UNION
SELECT 2, 5, 1 UNION
SELECT 2, 6, 1
INSERT INTO @XR
SELECT 1, 1, 1 UNION
SELECT 1, 2, 1 UNION
SELECT 1, 2, 2 UNION
SELECT 2, 4, 1 UNION
SELECT 2, 5, 2
INSERT INTO @SR
SELECT 1,'Apple', 1 UNION
SELECT 2,'Mango', 1 UNION
SELECT 3,'Banana',1 UNION
SELECT 4,'Apple', 2 UNION
SELECT 5,'Mango', 2 UNION
SELECT 6,'Banana',2
当我运行下面的SQL查询,我得到两个输出行这是很好的:
DECLARE @UD INT
SET @UD=1
SELECT * FROM @A A
WHERE EXISTS(
SELECT 1
FROM @EP [EP]
INNER JOIN @XR XR ON [EP].SID = A.SID
WHERE [EP].SID = A.SID
AND [EP].RID = XR.RID
AND [EP].[HR] = 1
AND XR.UID = @UD
)
--OUTPUT
--ID SID
------------- -----------
--1 1
--2 2
但是当我用“@ UD = 3”运行上面的查询时,我没有记录。我想提出一个条件在这里加入的应该是这样的:
SELECT * FROM @A A
--IF((SELECT COUNT(*) FROM @XR XR WHERE XR.XR=A.SID)>0)
WHERE EXISTS(
SELECT 1
FROM @EP [EP]
INNER JOIN @XR XR ON [EP].SID = A.SID
WHERE [EP].SID = A.SID
AND [EP].RID = XR.RID
AND [EP].[HR] = 1
AND XR.UID = @UD
)
--ELSE
WHERE EXISTS(
SELECT 1
FROM @EP [EP]
INNER JOIN @SR SR ON SR.SID = A.SID
WHERE [EP].SID = A.SID
AND [EP].RID = SR.RID
AND [EP].[HR] = 1
AND SR.[RNAME] = 'Banana'
)
的abover查询应返回两行两@UID 1和3,即如果没有找到记录@XR它应该特别UID去其他循环。你能帮我解决这个问题吗?我不想去工会这里,并希望在同样做SINGLE查询条件只加入而不写入外部if和其他循环。
[Rü寻找一个外部联接? –