左侧空记录的子查询问题 table

Subquery issue with null records in left table

运行有点问题。

SELECT
Q1.LOCATION_ID,
Q1.LAST_DATE,
Q1.SHIPMENT_LINE_STATUS_CODE
FROM Q1
WHERE
Q1.LAST_DATE =
(   SELECT
    MAX(Q2.LAST_DATE)
    FROM
    Q2
    WHERE
    Q2.LOCATION_ID = Q1.LOCATION_ID
    AND
    Q2.SHIPMENT_LINE_STATUS_CODE = 'RECEIVED'
)

问题是如果 SHIPMENT_LINE_STATUS_CODE 上没有“RECEIVED;”,我就没有记录。

例如,我要显示以下内容:

LOCATION_ID   LAST_UPDATE_DATE     SHIPMENT_LINE_STATUS_CODE
4544                 4/1/2021                       RECEIVED
4876                 NULL                            NULL

然而,我只得到这个:

LOCATION_ID   LAST_UPDATE_DATE     SHIPMENT_LINE_STATUS_CODE
4544                 4/1/2021                       RECEIVED

我需要 return 当 SHIPMENT_LINE_STATUS_CODE 不是 'RECEIVED'

时为 NULL 的记录

您可以使用 LEFT JOIN 重写此代码,它将 return 来自 Q1 的结果和仅来自 Q2:

的匹配结果
SELECT  Q1.LOCATION_ID,
        Q1.LAST_DATE,
        Q1.SHIPMENT_LINE_STATUS_CODE
  FROM  Q1
    LEFT JOIN (
              SELECT  LOCATION_ID,
                      MAX(LAST_DATE) AS LAST_DATE
                FROM  Q2
                WHERE SHIPMENT_LINE_STATUS_CODE = 'RECEIVED'
                GROUP BY LOCATION_ID
              ) a ON a.LOCATION_ID = Q1.LOCATION_ID AND a.LAST_DATE = Q1.LAST_DATE

CTE 和 LEFT JOIN 怎么样?...

;WITH CTE
AS (
    SELECT LOCATION_ID,
    MAX(Q2.LAST_DATE) AS LAST_DATE
    FROM
    Q2
    WHERE Q2.SHIPMENT_LINE_STATUS_CODE = 'RECEIVED'
    GROUP BY LOCATION_ID
    )
SELECT
Q1.LOCATION_ID,
Q1.LAST_DATE,
Q1.SHIPMENT_LINE_STATUS_CODE
FROM Q1
LEFT JOIN CTE on Q1.LAST_DATE = CTE.LAST_DATE AND Q1.LOCATION_ID = CTE.LOCATION_ID

你的问题含糊不清,但如果我理解正确的话,你想展示这个:

SELECT
   Q1.LOCATION_ID,
   Q1.LAST_DATE,
   Q1.SHIPMENT_LINE_STATUS_CODE
FROM Q1
WHERE Q1.LAST_DATE =
(   SELECT MAX(Q2.LAST_DATE)
    FROM Q2
    WHERE Q2.LOCATION_ID = Q1.LOCATION_ID
      AND Q2.SHIPMENT_LINE_STATUS_CODE = 'RECEIVED'
)
or Q1.SHIPMENT_LINE_STATUS_CODE is null