0

我有一个包含 1000 列的表(是的,它已标准化),用于存储 Biiig Daaata!

我需要插入更新新数据,因为它在一夜之间可用,并认为最快的方法是获取数据,生成 CSV 文件并插入表 2。

Table 1              Table2
(Real Data)         (Data to be merged)

然后执行以下操作:

INSERT INTO blueData b 
SELECT * 
FROM rawData r 
ON DUPLICATE KEY 
  UPDATE _____

这是我画一个空白的地方,基本上所有的字段都是1或0的位字段(PK除外)。我想在两个表中保留所有1的字段,其余的可以保持为零。

重新解释一下,Table2 将有与表 1 相关的新数据。我需要将表 2 中的新位字段设置为表 1 上的相应 PK,而不删除其 1 位字段。但是因为它生成一个 CSV,所以在数据的新列中生成了 0。

表格1:

Row1:
PK: abc
BI: 1
BG: 0 
BD: 0
BF: 0

表 2:

Row1:
PK: abc
BI: 0
BG: 1
BD: 1
BF: 0

最终需要像:Table1

Row1:
PK: abc
BI: 1
BG: 1
BD: 1
BF: 0

希望这一切都有意义:D

我需要帮助编写关于重复键的更新部分,如果我不必编写一个巨大的 SQL 语句来处理每一列(如果我必须在 Python 中生成一个),那么只处理 1000 列会很好使查询变得巨大!

4

1 回答 1

0

尝试使用逻辑OR

INSERT INTO Table1
SELECT * FROM Table2 b 
ON DUPLICATE KEY UPDATE
 Table1.BI = (Table1.BI OR b.BI),
 Table1.BG = (Table1.BG OR b.BG),
 Table1.BD = (Table1.BD OR b.BD),
 Table1.BF = (Table1.BF OR b.BF)

它将在表 1 中为您提供

|  PK | BI | BG | BD | BF |
---------------------------
| abc |  1 |  1 |  1 |  0 |

SQLFiddle

于 2013-05-28T20:18:25.863 回答