0

我们在 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)。

Select 2, tmp.EngineId, tmp.GearId from (Select distinct EngineId, GearId from tblVehicle order by EngineId, GearId) 作为tmp;

有人可以解释一下 SQLite 的这种行为吗?这是预期的行为吗?

4

1 回答 1

1

这是一个错误。

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

于 2012-10-18T15:47:31.783 回答