1

我有两个表项目和出价。我想加入他们并为每个项目选择最高出价。截至目前,表是空的,我想这样做,以便当我执行 mysqli_num_rows 时它应该返回 0 但它返回 1。当它返回 0 时,我想显示没有新项目的文本

SELECT i_name, i_id, MAX(price) FROM items JOIN bid USING (i_id)

我的问题是:

为什么返回 1?如何修正我的陈述?

4

1 回答 1

5

基本上,它返回一行,因为您包含 MAX(price),因此查询将始终返回其值。如果表为空,它将返回 null,所以这是一行。

每次包含聚合函数但不包含GROUP BY子句时,结果就是一行。

修复很简单:使用GROUP BY子句:

SELECT i_name, i_id, MAX(price) FROM items JOIN bid USING (i_id) GROUP BY i_name, i_id

当没有项目且现有项目没有出价时,该查询返回 0 行。

但是,如果您希望查询也显示没有出价的项目,并且在没有项目时只返回 0 行,请使用 LEFT JOIN:

SELECT i_name, i_id, MAX(price) FROM items LEFT JOIN bid USING (i_id) GROUP BY i_name, i_id
于 2013-06-23T00:03:39.470 回答