0

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

1 回答 1

1

我很抱歉这么说,所有的错都是我的。我在创建表时犯了一个错误,其中 ZoomID 的类型为 varchar,并且它的类型为 int。类型的不同使得无法满足 Where 条件。并且似乎仅当比较表达式中至少有 1 个常量(如上面的 4 个)时才应用自动转换。

对不起!

于 2013-05-06T04:24:24.723 回答