请在下面查看我的表格和数据-
DECLARE @test1 TABLE (Ref nvarchar(10) NULL, Dates datetime NULL);
INSERT INTO @test1(Ref, Dates)
VALUES
('R1', '2018-10-26'),
('R2', '2018-10-26'),
('R5', null);
DECLARE @test2 TABLE (P_Ref nvarchar(50) null, Name nvarchar(50) null);
INSERT INTO @test2(P_Ref, Name)
VALUES
('R1', 'N1'),
('R1', 'N2'),
('R2', 'N1'),
('R2', 'N2'),
('R3', 'N1'),
('R3', 'N2'),
('R4', 'N2'),
('R5', 'N3'),
('R6', 'N3'),
('R7', 'N4');
我在表1 where
中使用@test1
条件,它是Ref
列与表2 @test2
P_Ref
列的连接。
我想要两个表中的所有相关数据以及Name
表中的所有匹配项@test2
我的查询是-
select t1.Ref, t2.P_Ref, t2.Name from
@test1 t1
right join @test2 t2
on t1.Ref = t2.P_Ref
where t1.Dates is not null
我得到的输出-
Ref P_Ref Name
R1 R1 N1
R1 R1 N2
R2 R2 N1
R2 R2 N2
我正在查看以下输出-
Ref P_Ref Name
R1 R1 N1
R1 R1 N2
R2 R2 N1
R2 R2 N2
NULL R3 N1
NULL R3 N2
NULL R4 N2
有人可以帮助我如何实现这一目标。
预先感谢
答案 0 :(得分:2)
尝试以下查询
SELECT t1.Ref, t2.P_Ref, t2.Name
FROM @test1 t1
RIGHT JOIN @test2 t2 ON t1.Ref = t2.P_Ref
WHERE t2.Name IN(
SELECT DISTINCT t2.Name
FROM @test1 t1
JOIN @test2 t2 ON t1.Ref = t2.P_Ref
WHERE t1.Dates IS NOT NULL
)
答案 1 :(得分:0)
尝试以下查询
select t1.Ref, t2.P_Ref, t2.Name from
@test1 t1 right join @test2 t2
on t1.Ref = t2.P_Ref
where Name in ('N1', 'N2')
答案 2 :(得分:0)
如果预期有大量记录,而它们的interface
可能不是Dates
,那么优化的选项将如下所示。
NULL
答案 3 :(得分:0)
问题在于您的WHERE子句将您的外部联接变成隐式内部联接。要过滤外部表,通常最简单的方法是将外部表的过滤条件移动到联接条件。
select t1.Ref, t2.P_Ref, t2.Name from
@test1 t1
right join @test2 t2
on t1.Ref = t2.P_Ref
and t1.Dates is not null