为什么我的SQL语句在两个表都为空的情况下都返回1


Why does my SQL statement return 1 even though both tables are empty?

我有两个表项目和出价。我想加入他们,并选择每个项目的最高出价。到目前为止,该表是空的,我想让它在执行mysqli_num_rows时返回0,但返回1。当它返回0时,我想显示没有新项目的文本

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

我的问题是:

为什么它返回1?如何修改我的对账单?

基本上,它返回一行,因为您包含了MAX(价格),所以查询将始终返回其值。如果表为空,它将返回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
相关文章: