我一直试图连接几个表以获得正确的结果。 问题是它返回了一些NULL值,但实际情况并非如此。
EP.ProductId,CreateDate,IsproductActivated和Subject返回一个Null值。我注意到,当我进行如下所示的正确连接时,DossierID和dossier将返回一个值。 有人可以帮助我处理我的案件吗?
SELECT
EP.ProductId AS [ProductId]
,MAX(EP.CreateDate) AS [CreateDate]
,EP.IsProductActivated AS [IsProductActivated]
,PC.EntityId AS [DossierID]
,PC.EntityDiscriminator AS [EntityDiscriminator]
,PDCP.Name AS [Subject]
,D.Name AS [Dossier]
FROM
[tblEntityProduct] AS EP
LEFT JOIN .tblPDCProduct AS PDCP
ON PDCP.id = EP.Productid
LEFT JOIN
[tblProductContainerContent] AS PCC
ON PCC.EntityProductId = EP.ProductId
RIGHT JOIN
[tblProductContainer] AS PC
ON PC.Id = PCC.Productcontainerid
LEFT JOIN
[tblDossier] AS D
ON D.Id = PC.Entityid
WHERE PC.EntityId = 2803
GROUP BY EP.Productid
,IsProductActivated
,EntityId
,EntityDiscriminator
,PDCP.name
,D.name
答案 0 :(得分:0)
使用内部联接避免获取空值,因为LEFT JOIN关键字返回左表(table1)中的所有记录,并返回右表(table2)中的匹配记录。如果不匹配,则结果从右侧为NULL。对于相反的右连接对于左连接是正确的
SELECT
EP.ProductId AS [ProductId]
,MAX(EP.CreateDate) AS [CreateDate]
,EP.IsProductActivated AS [IsProductActivated]
,PC.EntityId AS [DossierID]
,PC.EntityDiscriminator AS [EntityDiscriminator]
,PDCP.Name AS [Subject]
,D.Name AS [Dossier]
FROM
[tblEntityProduct] AS EP
JOIN .tblPDCProduct AS PDCP
ON PDCP.id = EP.Productid
JOIN
[tblProductContainerContent] AS PCC
ON PCC.EntityProductId = EP.ProductId
JOIN
[tblProductContainer] AS PC
ON PC.Id = PCC.Productcontainerid
JOIN
[tblDossier] AS D
ON D.Id = PC.Entityid
WHERE PC.EntityId = 2803
GROUP BY EP.Productid
,IsProductActivated
,EntityId
,EntityDiscriminator
,PDCP.name
,D.name
答案 1 :(得分:0)
我讨厌右联接。他们基本上是一个需要此表,而与导致它的其他表无关。相反,我反转了查询以将REQUIRED表放在第一个位置,然后将LEFT-JOIN放在基础上。现在,基于结构/连接,我想您从产品容器开始的想法将永远存在。每个产品容器中都有东西(ProductContainerContent)。然后,每个内容项都是一个实体产品以获取其描述。每个容器都有自己的档案,可以在准备容器时分配(或不分配)。如果我是正确的话,大多数LEFT-JOIN应该只是标准(内部)JOIN,但是让我们看看这对您的数据有何作用。
SELECT
EP.ProductId,
MAX(EP.CreateDate) CreateDate,
EP.IsProductActivated,
PC.EntityId DossierID,
PC.EntityDiscriminator,
PDCP.Name Subject,
D.Name Dossier
FROM
tblProductContainer PC
LEFT JOIN tblProductContainerContent PCC
ON PC.Id = PCC.Productcontainerid
LEFT JOIN tblEntityProduct EP
ON PCC.EntityProductId = EP.ProductId
LEFT JOIN tblPDCProduct PDCP
ON EP.Productid = PDCP.id
LEFT JOIN tblDossier D
ON PC.Entityid = D.Id
WHERE
PC.EntityId = 2803
GROUP BY
EP.Productid,
IsProductActivated,
EntityId,
EntityDiscriminator,
PDCP.name,
D.name