我有一个超过1米的目标表。每次我都会得到5万行,其中可能包含多个重复的条目。因此,我决定将csv数据存储到一个临时表中,然后通过比较两个表之间的行从临时表到目标表。。。
如果发现重复条目,请将临时表中的数据追加到目标表中,否则插入表中。。。我在这里使用分区,所以重复密钥更新在这里不起作用。。在临时表中,我没有使用任何键
我有两张table,看起来像下面
temp_table
Name | Type
John | Civil
John | Mech
target_table
Name | Type
John | Civil
当我在查询下面运行时,我得到的是一行的输出
UPDATE target_table JOIN temp_table
ON temp_table.Name = target_table.Name
SET target_table.Type = IF((LOCATE(temp_table.Type, target_table.Type) > 0)
target_table.Type,CONCAT(target_table.Type,',',temp_table.Type))
target_table
Name | Type
John | Civil
我期望输出如下
target_table
Name | Type
John | Civil, Mech
我能知道哪里出了问题吗?
2条答案
按热度按时间6mw9ycah1#
您应该在join中使用groupconcat和子查询
bsxbgnwa2#
我怀疑(但不确定),希望知道的人会跳进来纠正我,updatejoin不会像select那样创建笛卡尔积。作为试图证明
请注意,临时表中的被忽略,而mech完全是偶然选择的。
如果我们改变临时表的顺序
我们得到
在这里,完全是偶然选择的。
在我看来,最安全的方法是一行一行的(光标)。