程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql一對多關聯查詢的時候篩選條件

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

編輯:關於MYSQL數據庫

       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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved