gpt4 book ai didi

SQL表合并算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:33 25 4
gpt4 key购买 nike

我需要一些帮助来合并不同 SQLLite 数据库中的两个表。

我们将表称为T1T2。这些表具有相同的模式,但位于不同的数据库中。假设 T1 位于名为 DB_Target 的数据库中,T2 位于名为 DB_Source 的数据库中。表格的架构很简单:

Table    Columns 
--------------------------------------
T1 id, url, cat
T2 id, url, cat

我想合并这两个表,所以如果第一个表包含第二个表中的 url,只需更新 cat 列,否则通过递增 id 从 url 和 cat 添加到第一个表。简单的算法是:

for url2 in second_table:
url1 = "SELECT url FROM first_table"
if url1 == url2 then Update first_table
else INSERT INTO first_table and increment id

两个表都有10K左右的url,很长,请问有SQL合并的算法吗???

最佳答案

根据您对您确切需要的描述,我不是 100% 清楚,但我认为它是这样的:

首先,使用 T2 中的匹配 URL 运行更新 T1...

UPDATE     T1
SET T1.Cat = T2.Cat
FROM Table1 T1
INNER JOIN Table2 T2 on T1.URL = T2.URL

然后将额外的记录从 T2 插入到 T1....

INSERT INTO Table1 (id, url, cat)
SELECT T2.id, T2.URL, T2.Cat
FROM Table2 T2
LEFT JOIN Table1 T1 on T2.URL = T1.URL
WHERE T1.URL IS NULL

注意事项:

  • 您没有指定您正在使用的数据库和版本。单个 MERGE 语句也可能是一种选择。
  • 不清楚 ID 是否是身份/自动递增字段。如果是,则从插入语句中删除 ID

更新 SQL Lite

我只是顺带使用了 SQLLite,因此对此持保留态度。但是,您似乎需要发出两个 ATTACH DATABASE ( docs ) 命令以确保 DB1 和 DB2 都附加到连接。像这样的东西:

ATTACH DATABASE filename AS database-name;

一旦连接了两个数据库,您就可以在表名前加上数据库名。因此,假设您将 Table1 作为 DB_Target 并将 Table2 作为 DB_Source 附加,选择将演变为类似...

UPDATE     T1
SET T1.Cat = T2.Cat
FROM DB_Target.Table1 T1
INNER JOIN DB_Source.Table2 T2 on T1.URL = T2.URL

这里是 an article that walks you through更深入一点。

关于SQL表合并算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991477/

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