mysql一對多關聯查詢的時候篩選條件

來源:互聯網
上載者:User

   mysql實現users 表和 logoin_log表是一對多, 現在是把user的資訊找出來 關聯上一些 logoin_log表的資料, 因為a表是多的一方,要多他的資料進行一些條件匹配,這個sql目的是查出每個使用者的最新的log記錄

  有的人建議進行表串連來進行篩選,不過那樣很麻煩,小濤我斷然拒絕了,然後我採用了另一個巧妙的方法:

  列表的時候採用先查一個表,這裡查的是users表,然後再傳值到方法,該方法進行封裝查詢logoin_log,此時要通過id倒序排列,返回相應的值,這樣就可以獲得最新的log記錄了,這樣是不是更簡單呢,得意……堅決用表串連的盆友們,趕快試試這種方法吧。

  users 表和 auth_token_log表是一對多, 現在是把user的資訊找出來 關聯上一些 auth_token_log表的資料, 因為a表是多的一方,

  要多他的資料進行一些條件匹配

  這個sql目的是查出每個使用者的最新的log記錄

  原始寫法

 代碼如下  


SELECT
 users.first_name,
 users.email_address,
 users.tp_user_id,
 users.tp_username,
 auth_token_log.module_access,
 auth_token_log.created_date
FROM
 users
 INNER JOIN auth_token_log ON users.id = auth_token_log.user_id
WHERE
 auth_token_log.id in(
  SELECT
  max(id)
FROM
  auth_token_log
WHERE
  auth_token_log.user_id = users.id
 )

 

  自己的理解

 代碼如下  

SELECT
 users.first_name,
 users.email_address,
 users.tp_user_id,
 users.tp_username,
 auth_token_log.module_access,
 auth_token_log.created_date
FROM
 users
 INNER JOIN auth_token_log ON users.id = auth_token_log.user_id
WHERE
 auth_token_log.id in(
  SELECT
  max(auth_token_log.id)
FROM
  auth_token_log,
  users
WHERE
  auth_token_log.user_id = users.id
GROUP BY
  users.id
 )  

  對於原始寫法的理解是

  先查出

 代碼如下  
SELECT
 ×
FROM
 users
 INNER JOIN auth_token_log ON users.id = auth_token_log.user_id

  的記錄, 然後針對每一行記錄X,拿出這一行X與 一個新的auth_token_log表做join,然後篩選出 log.user_id = x..user.id的所有記錄, 然後查出max(id), 這就是最新的log記錄的 id

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.