假设我的数据库中包含列Id,Name,Code的表。 当我执行时,让我们说
SELECT * FROM Order
我得到两条记录:
Id,Name,Code
1,FirstOrder,165y
2,SecondOrder,165y
两个订单使用相同的代码,一切正常! 但是当我试图通过代码找到时:
SELECT * from ORDER where code = '165y'
我的结果只有一行:
Id,Name,Code
1,FirstOrder,165y
尽管它具有相同的代码,但未显示第二个顺序。 但如果我试试这个:
SELECT * from Order where lower(code) = '165y'
我再次获得两行:
Id,Name,Code
1,FirstOrder,165y
2,SecondOrder,165y
在我看来,这些行具有相同的代码值:'165y',但看起来像postgres在某种程度上有所不同。 Postgres版本 - 9.3.17, 代码列类型 - varchar(50)。
可能是什么问题?我甚至不知道在哪里搜索。 需要帮助。
答案 0 :(得分:0)
问题得到部分解决。 这种行为的主要原因是 像
一样搜索SELECT * from Order where lower(code) = '165y'
查询时使用Seq Scan
SELECT * from ORDER where code = '165y'
使用代码字段上的唯一索引进行位图索引扫描搜索。
我仍然不知道如何使用唯一索引重复值。 所以我只是删除了这个索引,清理了重复项并再次创建了索引。