MySQL连接两个表来查找所有行,除了具有最大值的行

时间:2012-12-29 21:22:43

标签: mysql sql join max

我正在尝试编写一个查询,该查询将查找组中的所有行,但不包括具有最大值的行。到目前为止,我有一个查询,找到具有最大值的行,但现在我需要找到所有其余的行。这是一个包含两个数据库和示例数据的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

以上是查找最多行的查询。我正在尝试使用listing.id = bids.listing_id上的出价表加入列表。然后我需要找到用户($ user或用户“1”)对该列表出价的所有行。然后我需要排除用户具有最高出价的列表(这是上面的查询所做的)。

我原本以为我可以使用上面的查询作为子查询来排除用户是最高出价者的列表。但是我不确定这是否是最好的方法,我对子查询不太好。

1 个答案:

答案 0 :(得分: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