查询的sql顺序无法正常工作

时间:2012-10-17 09:12:55

标签: sql

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)

定义的imac(第3行)之后

4 个答案:

答案 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或其他相关的顺序是正确的,请尝试将类型更改为数字。