Sqlite 将两个表简单合并为一个表,其中包含两个表的列
有没有办法以1:1的方式组合两个表?似乎一个Sqlite 将两个表简单合并为一个表,其中包含两个表的列,sqlite,Sqlite,有没有办法以1:1的方式组合两个表?似乎一个JOIN真正做的是在两个表中的行之间创建所有可能的组合,然后使用ON筛选出不感兴趣的行。但我真正想要的是合并两个任意表,如下所示: a b a | b --- + --- => ---+--- 1 8 1 | 8 9 3 9 | 3 7 4 7 | 4 5 0 5 | 0 各
JOIN
真正做的是在两个表中的行之间创建所有可能的组合,然后使用ON
筛选出不感兴趣的行。但我真正想要的是合并两个任意表,如下所示:
a b a | b
--- + --- => ---+---
1 8 1 | 8
9 3 9 | 3
7 4 7 | 4
5 0 5 | 0
各个表可能由选定的表组成,也可能是由SELECT
/UNION
ing文本值创建的文本值。解决方案不应依赖于获取两个表的任何特定方式,而是可以假设两个表的行数始终相同
例如,假设第一列可以通过以下方式找到:
SELECT value FROM table ORDER BY x ASC
SELECT * FROM (SELECT 8 UNION SELECT 3 UNION SELECT 4 UNION SELECT 0),(SELECT 1 UNION SELECT 9 UNION SELECT 7 UNION SELECT 5 as B)
第二列可通过以下方式找到:
SELECT value FROM table ORDER BY x ASC
SELECT * FROM (SELECT 8 UNION SELECT 3 UNION SELECT 4 UNION SELECT 0),(SELECT 1 UNION SELECT 9 UNION SELECT 7 UNION SELECT 5 as B)
现在,如果我执行此查询:
SELECT * FROM
(SELECT value FROM table ORDER BY x ASC) AS a,
(SELECT 1 UNION SELECT 9 UNION SELECT 7 UNION SELECT 5 as B)
我每返回16行,将每个a值与每个b值配对,而实际上我只需要4行,如上表所示。此外,我想不出一个调节器来过滤掉我不想要的行,因为这些表没有任何共同点
联合
无法工作,因为它将行联合在一起。我想做的更像是将列合并在一起
我尝试了以下方法:
SELECT * FROM
(SELECT value FROM table ORDER BY x ASC) AS a,
(SELECT 1 UNION SELECT 9 UNION SELECT 7 UNION SELECT 5 as B)
ON
a.rowid == B.rowid
但这似乎只有在两个子选择都是手动创建的情况下才起作用(例如,与第二个子句相同的方式) 你看过这个堆栈溢出答案了吗:
SELECT
t1.a
UNION
t2.b
它将产生4个唯一的行(正如您所要求的)。请参阅此处,以了解联合
如何在本例中为您工作的解释b/c您的2个表中没有重复的信息…而联合所有
将产生8行,而联合
应产生4行(仅在本例中):
现在,这可能不适用于其他非唯一行,但这不是您所要求的
无论如何,我提供的第二个链接为您提供了将一个表转储到另一个表中的示例和说明,这基本上是实现这一点的唯一方法,因为SQL语句将在两个表上以关系方式工作,这就是您遇到问题的原因
您基本上是在尝试组合两个表,而这两个表之间没有任何实际关系,因此您真正想要/需要的是进行某种连接…然后将它们重新分析回列中。在这方面,您有几个选项:
- 最好使用某种ETL工具(或脚本),然后
- 把它压缩成一个文本文件
- 然后使用连接列时在列之间设置/注入的列分隔符重新导入到表中
如果没有工具或外部脚本将结果集连接为文本文件,请尝试使用我在上面的链接中提供的SQL示例。您可以尝试创建两个ID为的临时表,然后根据自动增量字段将它们连接起来。我不太明白第一个问题是什么,但我不认为这是一个错误第二个问题是使用
UNION
,我相信它将联合行,而不是列。它将联合行,这是正确的…然而,在您的示例中,您的所有行都是唯一的,因此它应该可以工作,但是一个联合将创建8行,每行1列,对吗?而我需要4行,每行2列我当然会这么做。但是,一个联盟会产生尽可能少的结果,b/c它会消除重复。所以,在你的情况下……根据你在问题中提供的数据,它应该只有4行。Estella,尝试形成一个全面的答案,而不是一看到就触发不同的链接;)