2013-11-21 110 views
0

我想要一个SQL查询,确定与特定值的行中Table1存在,或Table2,或两者的SQL Server 2008 - T-SQL查询

这里是我写的,但它只给我值存在于第一个表中,但如果它存在于第二个表中,但不在第一个表中。我希望结果正如我上面的陈述一样。

SELECT CASE 
     WHEN EXISTS (SELECT Offerid 
         FROM dbo.OfferLocations 
         EXCEPT 
         SELECT Offerid 
         FROM dbo.OfferLocUpdate) THEN 1 
     ELSE 0 
     END 
+0

什么是您的比较标准? –

+0

我希望offerid在结果中显示,如果它存在于第一个tabl或第二个表中或两者都存在 – user2041076

+0

我根据locationid – user2041076

回答

0

你需要一个FULL OUTER JOIN,如下图所示:

; 
WITH OfferLocations AS -- Sample data, ignore it 
     ( SELECT OfferId 
      FROM (VALUES (1), (2), (3)) OfferLocations(OfferId) 
     ), 
     OfferLocUpdate AS -- Sample data, ignore it 
     ( SELECT OfferId 
      FROM (VALUES (2), (3), (4)) OfferLocUpdate(OfferId) 
     ) 
SELECT  ISNULL(OfferLocations.OfferId, OfferLocUpdate.OfferId) OfferId, 
      CASE WHEN OfferLocations.OfferId IS NULL THEN 0 ELSE 1 END [ExistsAtOfferLocations], 
      CASE WHEN OfferLocUpdate.OfferId IS NULL THEN 0 ELSE 1 END [ExistsAtOfferLocUpdate] 
FROM  OfferLocations 
FULL OUTER JOIN OfferLocUpdate 
      ON OfferLocations.OfferId = OfferLocUpdate.OfferId 
ORDER BY ISNULL(OfferLocations.OfferId, OfferLocUpdate.OfferId) 
0

尝试UNION而不是EXCEPT?这将得到两个表dbo.OfferLocationsdbo.OfferLocUpdate中不同的Offerid。

SELECT CASE 
    WHEN EXISTS (SELECT Offerid 
        FROM dbo.OfferLocations 
        UNION 
        SELECT Offerid 
        FROM dbo.OfferLocUpdate) THEN 1 
    ELSE 0 
    END