簡體   English   中英

MySQL連接兩個表以查找除具有最大值的行以外的所有行

[英]MySQL join two tables to find all rows EXCEPT the row with the max value

我正在嘗試編寫一個查詢,該查詢將查找組中除具有最大值的行以外的所有行。 到目前為止,我有一個查詢來查找具有最大值的行,但是現在我需要查找其余所有行。 這是帶有兩個數據庫和示例數據的SQLFiddle。 我也有查找最大行的查詢。 http://sqlfiddle.com/#!2/514d2/33

對於那些不想使用SQLFiddle的人...表名:列表表名:投標

SELECT listings.end_date, listings.user_id, listings.title, 
  listings.auc_fp, listings.id, listings.auc_image1
FROM listings 
JOIN bids b1 
ON b1.listing_id=listings.id 
LEFT JOIN bids b2 
ON b2.listing_id=listings.id AND b1.bid < b2.bid
WHERE b1.user_id = 1
AND b2.bid IS NULL
AND listings.end_date > NOW()
ORDER BY listings.list_ts DESC

上面是查找最大行的查詢。 我正在嘗試將Listings表與listings.id = bids.listing_id上的bids表結合在一起。 然后,我需要找到用戶($ user或用戶“ 1”)對該列表進行出價的所有行。 然后,我需要排除用戶具有最高出價的列表(這是上面的查詢所做的事情)。

我本來以為可以將上面的查詢用作子查詢,以排除用戶是最高出價者的列表。 但是我不確定這是否是最好的方法,並且我對子查詢不太滿意。

請注意,根據以下評論對答案進行了多次修訂。

SELECT
    lst.end_date,
    lst.title,
    lst.auc_fp,
    lst.id as listing_id,
    lst.auc_image1,
    b.user_id as bid_user_id,
    b.bid as bid_amount,
    maxbids.maxbid as maxbid_for_listing
FROM listings lst
INNER JOIN
(
    SELECT listing_id, MAX(bid) maxbid
    FROM bids b
    GROUP BY listing_id
) maxbids ON lst.id = maxbids.listing_id
INNER JOIN bids maxusers ON maxusers.bid = maxbids.maxbid AND maxusers.listing_id = maxbids.listing_id
INNER JOIN bids b ON
    maxbids.listing_id = b.listing_Id AND
    b.bid < maxbids.maxbid AND
    b.user_id <> maxusers.user_id
WHERE lst.end_date > NOW()
ORDER BY lst.list_ts DESC

暫無
暫無

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

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