在对此表和另一个表执行另一个SELECT之前,我必须将来自多个源的数据收集到临时表中。临时表有一个名为RoomID的列,而表(我想与临时表连接)也有一个名为RoomID的列(我加入这两个表以通过其RoomID获取有关指定Room的更多信息),但返回的行不是所有行(我认为应该满足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子句)中收集的。我不知道这是否重要。然而,SELECT在最后一个MyTempTable上执行,表明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是指在UNION原来的表,我用来创建MyTempTable,因为我可以看到,所有返回的行似乎只属于该表。
这真的很奇怪,如果它不是一个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
无法理解!
答案 0 :(得分:1)
我很遗憾地说,所有的错都属于我。我在创建表时犯了一个错误,其中ZoomID的类型为varchar,并且其类型为int。类型的差异使得Where Condition无法满足。并且似乎仅在比较表达式中存在至少1个常量(如上面的4)时才应用自动转换。
抱歉!