SQL select查询如下所示。它正在工作,但它返回的第一行是错误的。预期结果如下所示。
为什么会这样?你能解决这个问题吗?
SELECT pid, pname, pcost
FROM Product
JOIN SubCategory ON Product.subcate_id = SubCategory.subcate_id
JOIN Category ON SubCategory.cate_id = Category.cate_id
WHERE Category.cate_id = 1 order by pcost
结果集是
pid pname pcost
----------- -------- --------------
16 hp-dreamscreen 23232
25 imac-pc-parts 234
35 imac 2349
9 Apple_cinema_ 30000
14 hp-bu178aa 30000
15 lenovo-c200 32111
17 imac 345345
(7 row(s) affected)
您可以在第1行的结果集中看到问题 - 它应该出现在order(pcost)
答案 0 :(得分:1)
为什么世界上你将pcost
存储为(VAR)字符类型?
对于SQLite / MySQL,您可以使用1*
将数字强制转换为数字。
SELECT pid, pname, pcost
FROM Product
JOIN SubCategory ON Product.subcate_id = SubCategory.subcate_id
JOIN Category ON SubCategory.cate_id = Category.cate_id
WHERE Category.cate_id = 1
order by 1*pcost
对于SQL Server,您需要安全地玩,只需要强制数字。使用TRY_CONVERT
从SQL Server 2012开始就很容易order by TRY_CONVERT(int, pcost)
答案 1 :(得分:1)
pcost可能是一个varchar列。
尝试将其投射到cast (pcost as int)
答案 2 :(得分:0)
如果pcost
的数据类型不是数字。将其转换为numeric数据类型。试试这个,
SELECT...
FROM..
WHERE..
ORDER BY CAST(pcost as INT)
如果您使用MySQL
SELECT...
FROM..
WHERE..
ORDER BY CAST(pcost as SIGNED)
答案 3 :(得分:0)
pcost列的数据类型是什么?如果它是varchar或其他相关的顺序是正确的,请尝试将类型更改为数字。