我有两个表,我需要从每个表中选择一列。 这必须在单个查询中完成。 好消息是两列以正确的方式排序,它们都包含相同的行数。 现在,我知道我可以通过rowid加入两个表,但它很慢,因为它必须进行比较。在我的情况下,没有必要......我需要更像水平UNION ALL的东西来连接两个相等长度的列。
在SQLite 3中是否可以这样?
感谢。
TABLE1:
| timestamp | FIELD1 | FIELD2 | ...
| 12345678 | 000000 | 000000 | ...
| 00154789 | 000000 | 000000 | ...
TABLE2:
| temperature |
| 1000000000 |
| 2000000000 |
必需的选择输出
| timestamp | temperature |
| 12345678 | 1000000000 |
| 00154789 | 2000000000 |
QUERY :
SELECT timestamp, temperature
FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.rowid = TABLE2.rowid;
在我的测试应用程序中需要大约0.75秒。当我在我的程序中执行两个单独的SELECT并加入输出时需要大约0.4秒,但这不是很方便。最快的方法(~0.23s)是在一个表中同时包含两列,但由于我有多个版本的TABLE2共享相同的时间戳,所以这很浪费。
答案 0 :(得分:0)
两个或多个简单的SELECT语句 可以连接在一起形成一个 使用UNION,UNION复合SELECT ALL,INTERSECT或EXCEPT运算符。在 复合SELECT,所有成分 SELECT必须返回相同的数字 结果列。作为一个组件 复合SELECT必须是简单的SELECT 声明,它们可能不包含ORDER BY或LIMIT条款。订购和 LIMIT条款可能只发生在 整个化合物SELECT的结束。
使用UNION创建的复合SELECT ALL运算符返回所有行 UNION左侧的SELECT ALL运算符,以及来自的所有行 它右边的SELECT。该 UNION运算符的工作方式与 UNION ALL,除了重复的行 从最终结果集中删除。 INTERSECT运算符返回 结果的交集 左右选择。除外 运算符返回行的子集 由左边的SELECT返回 也不是右手归来的 选择。删除重复的行 从INTERSECT和。的结果 结果集之前的运算符除外 归还。