场景:我有2个表,即Coverage和Product
覆盖表: CID,CNAME,CTYPE,的CMessage,CDATE,CoverageProductId
产品表: PID,CNAME CTYPE,的CMessage,PDATE,CoverageProductId
通过使用CoverageProductId我将关联2个表。
我需要从两个表中获得3列CName,CMessage和CoverageProductId
下面的条件,
我的查询在MS sql server
下面SELECT Distinct C.CoverageProductID
,C.CName
,C.CType
FROM Coverage C
INNER JOIN Product P
ON C.CoverageProductID!=P.CoverageProductID
UNION
SELECT Distinct P.CoverageProductID
,P.CName
,P.CType
FROM Coverage C
INNER JOIN Product P
ON C.CoverageProductID=P.CoverageProductID
但结果不符合预期,并返回重复值。
答案 0 :(得分:2)
我认为这可能会做你想要的:
select P.CoverageProductID, P.CName, P.CType
from Product P
where exists (select 1
from coverage c
where p.CoverageProductID = c.CoverageProductID)
union all
select C.CoverageProductID, C.CName, C.CType
from Coverage C
where not exists (select 1
from product p
where p.CoverageProductID = c.CoverageProductID);
它会获取Product
中匹配Coverage
的所有行,然后来自Coverage
的所有行Product
中不匹配。
答案 1 :(得分:0)
我尝试过更好的方法进行同样的查询,
以下是我的代码,
SELECT
ISNULL(P.CoverageProductID,C.CoverageProductID),
ISNULL(P.CType,C.CType)
ISNULL(P.CName,C.CName)
FROM Coverage AS C
LEFT OUTER JOIN
Product AS P
ON C.CoverageProductID = P.CoverageProductID