我想在SQL中使用Same表中的左外连接数据和右外连接数据

时间:2016-06-07 12:34:52

标签: sql sql-server sql-server-2012

这是我的SQL存储过程,当我尝试执行右外连接或左外连接时,它不会返回任何数据。

DECLARE @testLeft TABLE (ID INT, SomeValue Uniqueidentifier)
DECLARE @testRight TABLE (ID INT, SomeOtherValue Uniqueidentifier)

INSERT INTO @testLeft (ID, SomeValue) 
VALUES
 (1, 'E32185F1-6237-434C-9C1B-EC7D694053EF')
,(2, '9DB48B93-535C-4A92-9FDF-F35627A2F759')
,(3, '33765811-958F-4B6C-A282-5F07E6AFEF5D')
,(4, '00000000-0000-0000-0000-000000000000')

INSERT INTO @testRight (ID, SomeOtherValue) 
VALUES
 (1, 'E32185F1-6237-434C-9C1B-EC7D694053EF')
,(2, '9DB48B93-535C-4A92-9FDF-F35627A2F759')
,(3, '33765811-958F-4B6C-A282-5F07E6AFEF5D')
,(4, 'A0CCC809-5BC9-46DF-B6E7-F6D4040FAF5D')
,(5, '73B979EE-7EC7-4B4E-A930-15D5661DF75B')
,(6, '00000000-0000-0000-0000-000000000000')

select * from @testLeft
select * from @testRight

SELECT 
    l.*
FROM 
    @testLeft l
INNER JOIN 
    @testRight r ON l.SomeValue = r.SomeOtherValue
WHERE 
    r.SomeOtherValue IS NULL

3 个答案:

答案 0 :(得分:0)

您在寻找完整的外部联接吗?此查询将匹配数据并返回任何不匹配的值。

SELECT
l.SomeValue
,r.SomeOtherValue
FROM 
    @testLeft l
 FULL OUTER JOIN 
    @testRight r 
    ON 
        l.SomeValue = r.SomeOtherValue
WHERE r.SomeOtherValue IS NULL
OR l.SomeValue IS NULL

如果这不是你想要的,请提供你的预期结果样本,我会更新我的答案。

答案 1 :(得分:0)

由于你有WHERE r.SomeOtherValue IS NULL,你没有得到任何价值。摆脱IS NULL,将显示与您的表格匹配的值。

SELECT 
    l.*
FROM 
    @testLeft l
INNER JOIN 
    @testRight r ON l.SomeValue = r.SomeOtherValue

答案 2 :(得分:0)

首先应该应用于where子句然后才能连接表。所以你的查询首先只得到空记录然后加入但没有得到结果所以它是空的。

SELECT l.*
FROM 
    @testLeft l
     FULL OUTER JOIN 
    @testRight r ON 
        l.SomeValue = r.SomeOtherValue