0

我有两张桌子,一张叫项目,一张叫出价。出价包含一堆带有 item_id 的出价。我正在尝试获取有关具有相关最高出价的项目的所有信息。

我试着做类似的事情

SELECT * FROM items JOIN bids ON items.id=bids.item_id GROUP BY item_id

然而,这似乎返回了第一个出价,而不是最高的。

我怎样才能达到最高?

4

2 回答 2

1

您需要使用子查询来发现最大出价值,然后将其与现有查询相结合以获得所有所需的输出数据。假设出价在名为 的列中value,并且该bids表的 PK 为名为 的列id

SELECT items.*, bids.*
FROM
  items
  JOIN (
    SELECT id, item_id, MAX(value) AS value FROM bids GROUP BY item_id
  ) AS maxbids ON items.id = maxbids.item_id
  JOIN bids    ON  bids.id = maxbids.id
GROUP BY items.id

如果有多个最大金额的出价,则此查询将返回所有出价。

于 2012-05-01T18:26:11.557 回答
0

我认为,自加入也可以。所以,假设(正如@eggyal 所做的那样)有一个bids.value列:

SELECT *
FROM items i
  JOIN bids b1 ON b1.item_id=i.id
  JOIN bids b2 ON b2.item_id=i.id AND b2.value>b1.value
WHERE b2.id IS NULL

但是,如果有多个相同金额的出价,这将返回多行。你想如何处理它们?

(这SELECT *应该缩小范围。)

于 2013-02-11T07:22:10.390 回答