为什么我的SQL语句返回1,即使两个表都是空的?

Jos*_* C. 1 php sql

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

SELECT i_name, i_id, MAX(price) FROM items JOIN bid USING (i_id)
Run Code Online (Sandbox Code Playgroud)

我的问题是:

为什么它会返回1?我该如何修改我的陈述?

Ale*_*ado 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
Run Code Online (Sandbox Code Playgroud)

当没有项目且现有项目没有出价时,该查询返回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
Run Code Online (Sandbox Code Playgroud)