我有两个表:客户和合同。他们之间的共同关键是customer_id。我需要链接这两个表来表示我的虚拟业务是否与客户签订合同。
客户 - >合同表具有一对多关系,因此客户可以记录旧合同。我想要最新的。这当前由contract_id处理,自动递增。
我的查询应该根据customer_id和该customer_id的最大contract_id获取合约数据。
我的查询目前看起来像这样:
SELECT * FROM(
SELECT co.*
FROM contracts co
LEFT JOIN customers c ON co.customer_id = c.customer_id
WHERE co.customer_id ='135') a
where a.contract_id = MAX(a.contract_id);
答案可能非常明显,我只是没有看到它。
答案 0 :(得分:1)
由于最近的合同将是a.contract_id
最高的合同,只需ORDER BY
和LIMIT 1
SELECT * FROM(
SELECT co.*
FROM contracts co
LEFT JOIN customers c ON co.customer_id = c.customer_id
WHERE co.customer_id ='135') a
ORDER BY a.contract_id DESC
LIMIT 1
答案 1 :(得分:1)
您可以使用EXTRA_OUTPUT
:
NOT EXISTS()
这将确保它是最新的合同,它对所有客户都是动态的,您只需删除SELECT * FROM contracts c
LEFT JOIN customers co
ON(co.customer_id = c.customer_id)
WHERE co.customer_id = '135'
AND NOT EXISTS(SELECT 1 FROM contracts co2
WHERE co2.customer_id = co.customer_id
AND co2.contract_id > co.contract_id)
即可获得所有结果。
通常,您不能在WHERE co.customer_id = '135'
子句上使用聚合函数,只能在通常与WHERE
子句组合的HAVING()
上使用。