簡體   English   中英

MySql:左聯接用戶表與事務表返回幾行

[英]MySql : left join users table with transactions table return several rows

  • 我有2個表:users和paypal_transactions
  • 對於每個用戶,我們都有一個ID(在paypal_transactions表中名為user_id)
  • 一個用戶可能有幾個paypal_transactions。 一對多關系
  • 查詢時,我需要獲取最新的交易ID(按date_dt DESC排序)

我當前的查詢:

SELECT `Transaction`.*, `User`.*, `Tipster`.`username`
FROM `pronostics_framework`.`users` AS `User`
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`)
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` ON (`User`.`id` = `Transaction`.`user_id`)
ORDER BY `User`.`id` DESC
LIMIT 500

目前,每個用戶只有一筆交易,它可以正常工作。 順便說一句,有很多交易,我仍然從paypal_transactions表中獲得第一個條目(最舊的,但是我現在想要最新的)。

我做了很多嘗試,但都沒有成功。

謝謝你的幫助 !

干得好:

SELECT `Transaction`.*, `User`.*, `Tipster`.`username`
FROM `pronostics_framework`.`users` AS `User`
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`)
LEFT JOIN (SELECT user_id, MAX(date_dt) AS max_date
            FROM `pronostics_framework`.paypal_transactions
            GROUP BY user_id) AS max_trans 
    ON User.id = max_trans.user_id
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` 
    ON (max_trans.user_id = `Transaction`.`user_id` AND max_trans.max_date = Transation.date_dt)
ORDER BY `User`.`id` DESC
LIMIT 500

另一種方法,基於檢索每個組中的最后一條記錄時第一個答案中的第一個查詢:

SELECT `Transaction`.*, `User`.*, `Tipster`.`username`
FROM `pronostics_framework`.`users` AS `User`
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`)
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` ON Transaction.user_id = User.id
LEFT JOIN `pronostics_framework`.paypal_transactions AS Transactions1 
    ON Transactions1.user_id = Transactions.user_id AND Transactions1.user_id > Transactions.user_id
WHERE Transactions1.user_id IS NULL
ORDER BY `User`.`id` DESC
LIMIT 500

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM