我需要用另一个表中的值更新列。。。但它需要永远或流产。特定安全(isin)可以在多个交易所(mic)列出。。。所以我认为我需要有两个条件在内部连接。。。在??). 我下面的尝试正确吗?我在表中有大约17万条记录,其中有4万个唯一的isin。
第一次尝试:

SQL:
SET SESSION SQL_BIG_SELECTS = 1;
UPDATE securities_live t1
INNER JOIN securities_prev t2
    ON t1.isin = t2.isin AND t1.mic = t2.mic
SET t1.prev_close = t2.close;

第二次尝试:
SQL:
SET SESSION SQL_BIG_SELECTS = 1;
UPDATE securities_live t1
INNER JOIN securities_prev t2
    ON (t1.isin = t2.isin AND t1.mic = t2.mic)
SET t1.prev_close = t2.close;

目前编辑两个表的相关索引:
Indexes (securities_live):
Primary|Unique=Yes|Packed=no|Column=id|Cardinality=166776|Collation=A

Indexes (securities_prev):
Primary|Unique=Yes|Packed=no|Column=id|Cardinality=166776|Collation=A

在这两个表中,列“id”上都有主键。例如,在表securities中,live“创建一个新索引”,一个用于列isin,另一个用于列mic?索引名和索引类型(Primary、Index、Unique、Fulltext)如何?尺寸?

最佳答案

对于此查询:

UPDATE securities_live t1 INNER JOIN
       securities_prev t2
       ON t1.isin = t2.isin AND t1.mic = t2.mic
    SET t1.prev_close = t2.close;

我建议在securities_prev(isin, mic, close)上建立一个索引。
但是,我怀疑您正在更新所有或几乎所有记录。如果是这样的话,通常会更快地截断表并用insert重新填充它。Update最好用于更新相对较少的行。

关于mysql - 内部联接多个属性不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51156078/

10-09 00:42