sqlite 大于查询的SQL返回错误结果

oyt4ldly  于 2023-04-12  发布在  SQLite
关注(0)|答案(1)|浏览(184)

我是SQLite的新手,希望能大大扩展我的技能。我创建了一个简单的数据库,其中有两个表,“产品”和“购物”。
我使用以下查询创建了我的第一个表和值

sqlite> CREATE TABLE shopping(Product TEXT PRIMARY KEY, Quantity       NOT NULL);
sqlite> INSERT INTO shopping(Product, Quantity) VALUES ('Jam', 1);
sqlite> INSERT INTO shopping(Product, Quantity) VALUES ('Bread', 2);
sqlite> INSERT INTO shopping(Product, Quantity) VALUES ('Tea', 5); 
sqlite> INSERT INTO shopping(Product, Quantity) VALUES ('Cereal', 1);

和以下查询来创建第二个表

sqlite> CREATE TABLE ProductData(Product TEXT PRIMARY KEY, Price NOT NULL);
sqlite> .import /home/solidsnake/Documents/ProductData.csv ProductData

此表的值通过.csv文件导入

sqlite> SELECT Product, Price
...> FROM products;

给出输出:

Jam,250
Tea,150
Cereal,120
Eggs,170
Cheese,320
Potatoes,80
Treacle,80
Bananas,100
Bread,230
Caviar,1000

我现在遇到的主要问题是我需要使用SQL查询来找出商店中哪些产品的成本高于120。
在互联网上进行了彻底的搜索后,我发现为我提供正确输入的正确查询是

SELECT * FROM "products" WHERE Price > '120';

然而,这给了我输出:

Jam,250
Tea,150
Eggs,170
Cheese,320
Potatoes,80
Treacle,80
Bread,230

正如你所看到的,土豆和糖浆的价格都是80,低于120。输出中没有提供鱼子酱,这似乎很奇怪,因为它的价格是1000
有没有人能给我指出正确的方向,我的语法有什么问题,为什么它会产生不正确的输出。
PS:很抱歉这篇文章太长了,但是我想提供尽可能多的信息。我是stackoverflow的新手,我已经尽可能地关注了'如何提问'这篇文章。
谢谢。
编辑:已解决
谢谢lad2025.I结束了删除购物表和重新创建它,纳入您的建议。查询现在完美地工作。

vecaoik1

vecaoik11#

请不要与字符串值比较(使用整数):

SELECT * FROM "products" WHERE Price > 120; -- instead of '120'

字符串排序不同于整型,因此'80'〉'120'是正确的,'1000'〈'120'也是正确的。

SELECT '80' > '120', 80 > 120
-- 1 0

SELECT '1000' > '120', 1000 > 120
-- 0 1

DBFiddle Demo

另外定义数量数据类型:

CREATE TABLE shopping(Product TEXT PRIMARY KEY, Quantity   INT    NOT NULL);

相关问题