2 つのテーブルがClients
ありContacts
(以下を参照)、最後に追加された連絡先のみを含むすべてのクライアントを取得したいと考えていました。
この解決策に出くわすまで、結合された連絡先で使用できなかったため、サブクエリの使用をほとんど検討していましたがLIMIT 1
、これは非常に単純なようです。
問題は、それが何をしているのかよくわからないことです。WHERE
句の背後にある論理も私を超えています。
これに対する副次的な質問: 2 つの結合はサブクエリよりも高速ですか?
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