如何解决左外连接的最大条件
|----------
samples
----------
SamplesID
stylenumber
stylename
status
-----------
samples_details
-----------
Samples_Details_ID
SamplesID
CustomerName
date_out
date_returned
updated (timestamp)
status
------------
samples_pictures
------------
SamplesPicID
SamplesID
尝试编写一个查询,该查询为我提供了示例的所有行,samples_pictures的所有匹配项(如果有)以及samples_details的最新记录(如果有)。因此,有两个左外部联接,但一个仅检索最新记录。
什么不起作用:
SELECT samples.*,samples_pictures.SamplesPicID,CustomerName,date_out,date_returned,updated,samples_details.status as txn_status
FROM samples
LEFT OUTER JOIN
( SELECT Samples_Details_ID,samples_details.status as txn_status,MAX(updated) as MaxUpdated
FROM samples_details
GROUP BY Samples_Details_ID
) AS MaxTable
ON MaxTable.SamplesID = samples.SamplesID
LEFT OUTER JOIN samples_pictures
ON samples.SamplesID = samples_pictures.SamplesID
任何帮助将不胜感激!
解决方法
您的原始查询仍然从samples_details中选择每个记录。
您将必须创建一个子选择,以仅过滤出具有最大时间戳记的那些记录,然后将其与您的samples_details表结合起来以获取其他列。
SELECT *
FROM samples s
LEFT OUTER JOIN sample_details sd ON sd.SamplesID = s.SamplesID
INNER JOIN (
SELECT SamplesID,MAX(update) AS Update
FROM samples_details
GROUP BY
SamplesID
) sdm ON sdm.SamplesID = sd.SamplesID
LEFT OUTER JOIN samples_pictures sp ON sp.SamplesID = s.SamplesID
,您的select语句中没有SamplesID
MaxTable
。应该:
SELECT samples.*,samples_pictures.SamplesPicID,CustomerName,date_out,date_returned,updated,samples_details.status as txn_status
FROM samples
LEFT OUTER JOIN (SELECT SamplesID,Samples_Details_ID,samples_details.status as txn_status,MAX(updated) as MaxUpdated FROM samples_details GROUP BY Samples_Details_ID)
AS MaxTable ON MaxTable.SamplesID = samples.SamplesID
LEFT OUTER JOIN samples_pictures ON samples.SamplesID = samples_pictures.SamplesID
,SELECT samples.*,samples_details.status as txn_status
FROM samples
LEFT OUTER JOIN samples_details
ON samples.SamplesID = samples_details.SamplesID
AND samples_details.updated =
( SELECT MAX(updated)
FROM samples_details
WHERE SamplesID = samples.SamplesID)
)
LEFT OUTER JOIN samples_pictures
ON samples.SamplesID = samples_pictures.SamplesID
,SELECT samples.*,txn_status
FROM samples
LEFT OUTER JOIN
( SELECT Samples_ID,status as txn_status
FROM samples_details
INNER JOIN
( SELECT Samples_ID,MAX(updated) as MaxUpdated
FROM samples_details
GROUP BY Samples_ID,Samples_Details_ID
) AS MaxTable
ON MaxTable.Samples_ID = samples.SamplesID
AND MaxTable.Samples_Details_ID = samples.Samples_Details_ID
) AS MaxJoin
LEFT OUTER JOIN samples_pictures
ON samples.SamplesID = samples_pictures.SamplesID
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。