【发布时间】:2018-05-19 12:27:31
【问题描述】:
我遇到了 SQL 查询问题;我正在尝试获取每个“资产”的最后服务日期。
我正在尝试将左连接与限制为 1 的子查询一起使用。
这是我的桌子:
lctn_test
testID, cleintID
1, 34
2, 34
srvc_test
srvcTestID, testID, serviceDate, servicePassed
1, 1, 2018-05-19 03:23:53, 1
2, 1, 2018-05-19 11:46:49, 1
3, 2, 2018-05-19 11:47:24, 1
这是我尝试过的(以及一些变体)
SELECT
lctn.testID AS assetID, lctn.ClientID,
srvc_test.serviceDate, srvc_test.servicePassed
FROM
lctn_test AS lctn
LEFT JOIN
srvc_test ON lctn.testID = (SELECT srvc_test.testID
FROM srvc_test
WHERE srvc_test.testID = lctn.testID
ORDER BY srvc_test.serviceDate DESC
LIMIT 1)
WHERE
lctn.ClientID = 34
ORDER BY
assetID
我期望得到什么:
assetID, ClientID, serviceDate, servicePassed
1, 34, 2018-05-19 11:46:49, 1
2, 34, 2018-05-19 11:47:24, 1
但这是我实际得到的:
assetID, ClientID, serviceDate, servicePassed
1, 34, 2018-05-19 03:23:53, 1
1, 34, 2018-05-19 11:46:49, 1
1, 34, 2018-05-19 11:47:24, 1
2, 34, 2018-05-19 03:23:53, 1
2, 34, 2018-05-19 11:46:49, 1
2, 34, 2018-05-19 11:47:24, 1
我仍在学习 SQL (mysql),我一生都看不到这个问题;我打赌这是一个菜鸟的错误,但我只是没有看到它。
【问题讨论】:
-
您应该使用
srvcTestID而不是testID加入。 -
什么是“资产”?
-
@PaulSpiegel 我无法加入 srvcTestID,因为它不是外键,lctn_test 表没有 srvcTestID。除非我没有理解你的意思。
-
@GordonLinoff 我正在录制的项目,例如可以是汽车。
-
... ON srvc_test.srvcTestID = ( SELECT srvc_test.srvcTestID ... )
标签: mysql sql subquery left-join