我们在SQLite(版本3)中遇到了一种奇怪的行为。
我们有一个车辆表,其中两列引用了发动机和齿轮。 当然,可能有不止一辆车具有相同的发动机齿轮组合。
我现在想要找到车辆的发动机和齿轮的独特组合(并将其用于插入=>这就是为什么randomblob(36))。
示例:
Vehicle | EngineId | GearId
-----------------------------
1 | 1 | 1
1 | 1 | 2
1 | 2 | 1
1 | 2 | 2
1 | 1 | 2
1 | 1 | 2
以下select语句导致行太多:
Select randomblob(36), tmp.EngineId, tmp.GearId from (Select distinct EngineId, GearId from tblVehicle order by EngineId, GearId) as tmp;
RandomId| EngineId | GearId
-----------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 2
5 | 1 | 2
6 | 1 | 2
但预期的结果只是:
RandomId| EngineId | GearId
-----------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 2
如果我用常量替换randomblob(36),结果就像预期的那样(当然没有随机ID)。
选择2,tmp.EngineId,tmp.GearId from(选择不同的EngineId,来自EngineId,GearId的tblVehicle顺序的GearId)为tmp;
有人能解释一下SQLite的这种行为吗?这是预期的行为吗?
答案 0 :(得分:1)
这是一个错误。
我可以用SQLite 3.6.23.1重现这个,但不能用3.7.15重现,所以它已经修复了。