子选择使SQlite忽​​略区别吗?

时间:2012-10-18 14:31:58

标签: database sqlite select subquery

我们在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的这种行为吗?这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

这是一个错误。

我可以用SQLite 3.6.23.1重现这个,但不能用3.7.15重现,所以它已经修复了。