在对这个表和另一个表执行另一个 SELECT 之前,我必须将来自许多源的数据收集到一个临时表中。临时表有一个名为 RoomID 的列,而表(我想加入我的临时表)也有一个名为 RoomID 的列(我加入这两个表以通过其 RoomID 获取有关指定房间的更多信息),但返回的行不是所有的行(我认为应该满足 WHERE 条件的所有行)。
这是我的临时表(在像这样创建并执行 SELECT 之后:)SELECT * FROM MyTempTable
:
ID1 | Name1 | ID2 | Name2 | RoomID
NULL NULL 2 A 2
2 A NULL NULL 2
1 B NULL NULL 3
3 C NULL NULL 4
4 D 5 E 8
RoomID 中的所有值都已填充,并且所有这些 RoomID 也存在于我想与 MyTempTable 加入的表中,这是该表(称为 Room):
RoomID | Name | Note
1 Dining-room NULL
2 Bathroom NULL
3 Pantry NULL
4 Living room NULL
5 Sitting room NULL
6 Music room NULL
7 Office room NULL
8 Library NULL
使用上面的这些表,以下查询应该返回所有匹配的行(我期望):
SELECT ID1, Name1, ID2, Name2, MyTempTable.RoomID as [RoomID], Name as [Room Name], Note
FROM MyTempTable, Room
WHERE MyTempTable.RoomID=Room.RoomID
但事实并非如此。关于MyTempTable,我想说更多,其实它是由3个UNION创建的,它的ZoomID中的所有值都是从其他表(参与UNION子句)收集的。我不知道这是否重要。但是,对最后一个 MyTempTable 执行的 SELECT 显示 MyTempTable 确实有一列 RoomID 填充了一些行。以下是执行上述 SELECT 后的内容:
ID1 | Name1 | ID2 | Name2 | RoomID | Room Name | Note
NULL NULL 2 A 2 Bathroom NULL
2 A NULL NULL 2 Bathroom NULL
1 B NULL NULL 3 Pantry NULL
3 C NULL NULL 4 Living room NULL
4 D 5 E 8 Library NULL
但是没有这样一个完整的结果,结果只包含 2 行,我什至不知道为什么它们总是那 2 行而不是上述行集中的任何其他 2 行:
ID1 | Name1 | ID2 | Name2 | RoomID | Room Name | Note
2 A NULL NULL 2 Bathroom NULL
1 B NULL NULL 3 Pantry NULL
我想,MyTempTable.RoomID 指的是我用来创建 MyTempTable 的 UNION 中的原始表,因为我可以看到所有返回的行似乎只属于该表。
这真的很奇怪,如果不是bug,我认为我们在SQLite 中对Temp 表能做的事情是非常有限的。
更新
您可以看到,没有返回 ZoomID 等于 4 的行,但如果我将 SELECT 更改为此,它会返回 - 为什么会这样?
SELECT ID1, Name1, ID2, Name2, MyTempTable.RoomID as [RoomID], Name as [Room Name], Note
FROM MyTempTable, Room
WHERE MyTempTable.RoomID=4 and Room.RoomID=4