左侧空记录的子查询问题 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
运行有点问题。
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