根据SQL中右侧表的条件获取左侧表的ID?

时间:2019-02-26 13:05:08

标签: sql sql-server-2008

我们有两个表“ 标题”和“ 请求”。

页眉表具有以下列“ NewItemHeaderId ”,“ HeaderStatus

请求表具有以下列“ NewItemRequestid ”,“ RequestStatus ”,“ NewItemHeaderId

使用左连接的下表值

NewItemHeaderId | HeaderStatus                      | NewItemRequestId | RequestStatus
1147             MRD - Standardizer Pending          3351               MRD - Standardizer Pending
1148             TPSP - QC Pending                   3352               TPSP - QC Pending
1148             TPSP - QC Pending                   3353               TPSP - QC Pending
1149             TPSP - QC Pending                   3354               MRD - Standardizer Pending
1149             TPSP - QC Pending                   3355               MRD - Standardizer Pending

我需要在满足以下条件的情况下获取NewItemHeaderId

  • RequestStatus必须为“ MRD-标准化程序待定
  • HeaderStatus还需要为“ MRD-待处理的标准化程序

以上示例形式

NewItemHeaderId 1149在请求表(3354,3355)中具有两个条目。

我们需要检查3354和3355 RequestStatus是否为“ MRD-标准化程序待处理”

如果两个状态都相同,那么我们需要检查HeaderStatus,如果不是,则应该为“ MRD-Standardizer Pending”。

例如,结果将如下所示

NewItemHeaderId
---------------
1149

1147未显示,因为RequestStatus和标头状态均为“ MRD-标准化程序待处理”

1148未显示,因为RequestStatus不是“ MRD-标准化程序待处理”

在上表中,HeaderStatus将是1149 NewItemHeaderId的“ MRD-待定标准化程序”

它将返回null。

如下表sql查询

SELECT NIH.NewItemHeaderId,NIH.TPSPStatus AS 'Header Status', 
NIR.NewItemRequestId,NIR.Status AS RequesStatus
FROM NewItemHeader NIH
LEFT JOIN NewItemRequest NIR ON NIR.NewItemHeaderId = NIH.NewItemHeaderId

1 个答案:

答案 0 :(得分:0)

我想您应该添加条件

SELECT NIH.NewItemHeaderId,NIH.TPSPStatus AS 'Header Status', 
NIR.NewItemRequestId,NIR.Status AS RequesStatus
FROM NewItemHeader NIH
LEFT JOIN NewItemRequest NIR ON NIR.NewItemHeaderId = NIH.NewItemHeaderId
WHERE NIH.TPSPStatus = 'MRD - Standardizer Pending' 
AND NIR.Status = 'MRD - Standardizer Pending'