SQL - 第三个表连接到两个表但第三个表中列的条件不同

时间:2014-07-08 18:13:08

标签: sql

我需要将一个表('Project')连接到同一列名称('Project.PRJG_RecordID')上的另外两个表('SalesOrder'和'POI'),但是'ProjectID'列中的条件是“项目”表在“POI”中必须为空,在“SalesOrder”中不能为空。你是怎么写这种语法的?

我最接近的是:

(自原始邮编以来编辑):

Select *
From SalesOrder
Inner Join Project On Project.PRJG_RecordID =
SalesOrder.SOM_PRJG_DfltRecordID
Left Join POI On ProjectGroup.PRJG_RecordID =
POI.POI_PRJG_DfltRecordID
Where Project.ProjectID is null -- as it relates to the POI table.
And Project.ProjectID = '12345' -- as it relates to the SalesOrder table.

注意:Project.PRJG_RecordID是uniqueidentifier,而Project.ProjectID是nvarchar(25)。

如何?

2 个答案:

答案 0 :(得分:0)

我可能会误解,但似乎你只需要添加一个

AND SalesOrder.ProductID IS NOT NULL

到WHERE子句的末尾

你也没有加入POI表。您加入ProjectGroup,它在任何地方都没有使用。也许你打算这样做?

Select *
From SalesOrder
Inner Join Project On Project.PRJG_RecordID =
SalesOrder.SOM_PRJG_DfltRecordID
Left Join POI On POI.POI_PRJG_DfltRecordID = SalesOrder.SOM_PRJG_DfltRecordID
Where Project.ProjectID is null
AND SalesOrder.ProductID IS NOT NULL

答案 1 :(得分:0)

您的问题并不清楚您希望输出看起来像什么,但试试这个。您需要将项目设置为最左侧,因为POI和SalesOrders都连接到Project,但是您必须过滤掉未连接到其他两个表中至少一个的项目行。

SELECT *
FROM Project
  LEFT OUTER JOIN SalesOrder On Project.PRJG_RecordID = SalesOrder.SOM_PRJG_DfltRecordID
  LEFT OUTER JOIN POI On Project.PRJG_RecordID = POI.POI_PRJG_DfltRecordID
WHERE (POI.POI_PRJG_DfltRecordID IS NOT NULL AND Project.ProjectID is null)
   OR (SalesOrder.SOM_PRJG_DfltRecordID IS NOT NULL AND Project.ProjectID is NOT null)