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