gpt4 book ai didi

mysql - 这个(工作)查询背后的解释?

转载 作者:行者123 更新时间:2023-11-29 01:30:08 24 4
gpt4 key购买 nike

我有两个表,ClientsContacts(见下文),我想获取所有客户,只包含他们最后添加的联系人。

我几乎在考虑使用子查询,因为我不能对我加入的联系人使用 LIMIT 1,直到我偶然发现这个解决方案,它看起来非常简单。

问题是,我真的不明白它在做什么。 WHERE 子句背后的逻辑也超出了我的理解范围。

附带问题:两个连接仍然比子查询快吗?

PS:我用的是MySQL。

谢谢。

SELECT
cl.clientId as clientId,
cl.clientName as clientName,
c1.firstName as firstName,
c1.lastName as lastName,
c1.added as added
FROM Clients as cl
LEFT JOIN Contacts as c1 ON cl.clientId = c1.clientId
LEFT JOIN Contacts as c2 ON cl.clientId = c2.clientId AND c1.added < c2.added
WHERE c2.added IS NULL

客户

-----------------------------
clientId clientName
-----------------------------
1 Johnny's
2 Bonnie's

联系人

-------------------------------------------------------
clientId firstName lastName added
-------------------------------------------------------
1 Johnny Simmons 2013-06-17
1 Jane Simmons 2013-06-18
2 Bonnie Hall 2013-06-19

结果

----------------------------------------------------------------------
clientId clientName firstName lastName added
----------------------------------------------------------------------
1 Johnny's Jane Simmons 2013-06-18
2 Bonnie's Bonnie Hall 2013-06-19

最佳答案

LEFT JOIN Contacts as c2 ON cl.clientId = c2.clientId AND c1.added < c2.added
WHERE c2.added IS NULL

where子句说:Contacts 中不能有一行匹配cl.clientId = c2.clientId AND c1.added < c2.added .这会过滤掉之前添加的存在另一个联系人的所有联系人。

因此您最终会得到每个客户的最新联系信息。

关于mysql - 这个(工作)查询背后的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com