mysql - 选择查询未返回正确的值

标签 mysql database

我有一张这样的 table

create table Bids (
b_id INT not null auto_increment PRIMARY KEY,
u_id integer not null,
foreign key (u_id) references Users(u_id),
i_id integer not null,
foreign key (i_id) references Items(i_id),
bid_amount long,
}

然后我运行查询

Select * from Bids Where bid_amount in ( Select MAX(bid_amount) from Bids) 
and i_id=1

返回值为950如图
slect max bidamout

但是当我选择全部时,它不是正确的值,它应该是 1050 如下图

enter image description here

我的查询发生了什么?

最佳答案

您将 bid_amount 存储为文本,这不是一个好的做法,我建议您更改结构并分配适当的整数/ double 类型。现在您需要将列转换为数字,然后才能得到正确的结果。

快速破解不是解决方案

Select * from Bids 
Where bid_amount in ( Select MAX(bid_amount + 0) from Bids) 
and i_id=1

Demo

Select * from Bids 
Where bid_amount in ( Select MAX(CAST(bid_amount as DECIMAL(9,2))) from Bids) 
and i_id=1

或者

Select * from Bids 
Where bid_amount in ( Select MAX(CONVERT(bid_amount ,UNSIGNED INTEGER) ) from Bids) 
and i_id=1

Demo

关于mysql - 选择查询未返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269926/

相关文章:

mysql - 从多个表中选择(大数据)

php - 使用 sql 查询结果作为新 sql 语句的搜索词

sql - 查看 HTML5 Web SQL 数据库的工具?

java - 如何使用 mysqlimport?

php - sql select - 从 id xxx 获取 10 条记录

mysql - 数据库字段(GROUP_CONCAT)作为数组

mysql - 将记录传递给 MySQL 8 中的函数

php - 如何在 Laravel 中使用多个数据库

mysql - 顺序数据生成

database - Listview - 用数据库中的相应项目填充第二列