gpt4 book ai didi

android - 具有 m 列的 n 个表的 SQLite 联合

转载 作者:行者123 更新时间:2023-11-29 17:57:52 25 4
gpt4 key购买 nike

我有这个问题。动态创建了n张表,每张表有m列,列可以重复。此表有共同的 2 列,但它们之间没有相关数据,例如: 表格1|一个|乙 |列 1 | Col2 |

    Table2

|一个|乙 | Col3 | Col4 |

    Table3

|一个|乙 |列 1 |列2 | Col4 |

我想做的是像这样将所有表合并成一个大表:

    BigTable

|一个|乙 |列 1 |列2 | Col3 | Col4 |

所有的行连接起来,例如如果在 table1 rows = 5,table2 rows = 3,table3 rows = 2,大表将有 10 个条目。

我可以使用这样的查询来完成:

SELECT A, B, Col1, Col2, null as Col3, null as Col4 FROM Table1
UNION
SELECT A, B, null as Col1, null as Col2, Col3, Col4 FROM Table2
UNION
SELECT A, B, Col1, Col2, null as Col3, Col4 FROM Table3

但是我想知道有没有更好的方法来做,因为会有更多的列和更多的表,并且有可能所有的列都不一样。

最佳答案

查询的唯一改进是使用 union all 而不是 union。仅当您明确要删除重复项时才使用 union,因为它总是尝试:

SELECT A, B, Col1, Col2, null as Col3, null as Col4 FROM Table1
UNION ALL
SELECT A, B, null as Col1, null as Col2, Col3, Col4 FROM Table2
UNION ALL
SELECT A, B, Col1, Col2, null as Col3, Col4 FROM Table3;

编辑:

你可以进一步简化为:

SELECT A, B, Col1, Col2, null as Col3, null as Col4 FROM Table1
UNION ALL
SELECT A, B, null, null, Col3, Col4 FROM Table2
UNION ALL
SELECT A, B, Col1, Col2, null, Col4 FROM Table3;

列名仅用于union all 中的第一个select。之后,列由位置标识。

编辑二:

有一个技巧可以用来在 union all 上获得“逻辑”匹配。我不是特别喜欢它,但是您不必列出所有子查询的列。但是,select 比较复杂,它还有一个子查询,你仍然需要子查询:

select coalesce(t1.A, t2.A, t3.A) as A,
coalesce(t1.B, t2.B, t3.B) as B,
coalesce(t1.Col1, t2.Col1, t3.Col1) as col1,
coalesce(t1.Col2, t2.Col2, t3.Col2) as col2,
coalesce(t1.Col3, t2.Col3, t3.Col3) as col3
from (select 'Table1' as tablename union all
select 'Table2' union all
select 'Table3'
) driver left outer join
(select t.*, 'Table1' as tablename
from Table1
) t1
on t1.tablename = driver.tablename left outer join
(select t.*, 'Table2' as tablename
from Table2
) t2
on t2.tablename = driver.tablename left outer join
(select t.*, 'Table3' as tablename
from Table3
) t3
on t3.tablename = driver.tablename;

关于android - 具有 m 列的 n 个表的 SQLite 联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18022148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com