我有三张桌子; 拍卖,拍卖出价和用户.表结构看起来像这样:
Auctions:
id title
-- -----
1 Auction 1
2 Auction 2
Auction Bids:
id user_id auction_id bid_amt
-- ------- ---------- -------
1 1 1 200.00
2 2 1 202.00
3 1 2 100.00
Run Code Online (Sandbox Code Playgroud)
Users 只是一个标准表,具有id和用户名.
我的目的是加入这些表格,以便我可以获得这些出价的最高值,并获得与这些出价相关的用户名; 所以我有这样的结果集:
auction_id auction_title auctionbid_amt user_username
---------- ------------- -------------- -------------
1 Auction 1 202.00 Bidder2
2 Auction 2 100.00 Bidder1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的查询如下:
SELECT a.id, a.title, ab.bid_amt, u.display_name FROM auction a
LEFT JOIN auctionbid ab ON a.id = ab.auction_id
LEFT JOIN users u ON u.id = ab.user_id
GROUP BY a.id
Run Code Online (Sandbox Code Playgroud)
这得到了我追求的单行,但似乎显示最低的bid_amt,而不是最高的.
您可以使用MAX功能和子选择来获得每次拍卖的最高出价.如果您将此子选择与其他表连接并按如下所示设置where子句,则应该得到您要查找的内容.
SELECT a.id, a.title, ab.bid_points, u.display_name
FROM Auction AS a
INNER JOIN (SELECT auction_id, MAX(bid_points) AS maxAmount FROM auction_bids GROUP BY auction_id) AS maxBids ON maxBids.auction_id = a.id
INNER JOIN auction_bids AS ab ON a.id = ab.auction_id
INNER JOIN users AS u ON u.id = ab.user_id
WHERE ab.auction_id = maxBids.auction_id AND ab.bid_amount = maxBids.maxAmount
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.