【发布时间】:2018-04-19 10:21:58
【问题描述】:
我有以下表格,其中 >13.000 行。
CREATE TABLE "DBA"."mytable" (
"c1" numeric(8,0) NOT NULL,
"c2" numeric(2,0) NOT NULL,
"c3" numeric(4,0) NOT NULL,
"c4" numeric(8,0) NOT NULL,
PRIMARY KEY ("c1","c2","c3","c4")
)
当至少有两行恰好满足条件时,以下查询不返回任何行:
select * from mytable A where A.c1=229 and A.c3=1
更奇怪的是,稍微修改(但相同)的查询版本按预期返回 2 行:
select * from mytable A where A.c1=229 and A.c3+1=2
怀疑数据库中存在一些物理损坏,我创建了一个新数据库,使用上述代码创建了表并从卸载文件中加载了值。结果是一样的。
我知道 PK 中的所有四列都不是好的设计,但这不应该成为数据库返回错误结果的借口。 通过使用列创建顺序并删除 PK,问题消失并再次出现。
是否有人知道有关此问题的修复或解决方法? 数据库位于 Windows 8 64 位系统上,语言环境为土耳其语。
谢谢
【问题讨论】:
-
如果您使用
integer而不是numeric会发生什么?既然你没有十进制数字,为什么还要麻烦numeric? -
用整数测试过,没问题。但是在我的情况下,类型更改不是解析器,有很多 db 正在使用中。
标签: sql primary-key composite-primary-key sqlanywhere sybase-asa