哪里(甚至任何类型的连接)不能与SQLite中的Temp表一起使用?

时间:2013-05-06 03:21:27

标签: sql sqlite select

在对此表和另一个表执行另一个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

无法理解!

1 个答案:

答案 0 :(得分:1)

我很遗憾地说,所有的错都属于我。我在创建表时犯了一个错误,其中ZoomID的类型为varchar,并且其类型为int。类型的差异使得Where Condition无法满足。并且似乎仅在比较表达式中存在至少1个常量(如上面的4)时才应用自动转换。

抱歉!