首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于外键选择的数据本地文件加载

基于外键选择的数据本地文件加载
EN

Stack Overflow用户
提问于 2018-06-11 14:44:46
回答 2查看 568关注 0票数 1

我希望将数据插入到基于外键的表中,从本地数据文件中查找数据,但我不确定语法。我有一个单词清单:

代码语言:javascript
复制
jamba
fire
street
road

在我希望插入到表中的文件中,使用

代码语言:javascript
复制
LOAD DATA LOCAL INFILE '$PATH'
    INTO TABLE b1 
    FIELDS TERMINATED BY '\n' 
    (SELECT id FROM dictionary
     WHERE dictionary.word='word-from-file');

为了更好地描述这个项目:我试图从字典中创建一个外键表来布局一本书,就像使用字典条目号而不是用词来订购一本书。

也就是说:表中的句子The quick brown fox jumped over the lazy dog将是1024 891 26 51 75 521 1024 762 1024 641 45 (完全猜测),但其中每个数字都是字典中一个单词的id号。

第一个表是字典:

代码语言:javascript
复制
Field    Type
id       word
word     varchar(128)

第二个表是书,b1:

代码语言:javascript
复制
Field    Type
pos      int   #Position of the word, essentially an id
wid      int   #A foreign key corresponding to a dictionary.word

对案件敏感的问题。不要和不要是两个不同的词。

本质上,我试图执行这个操作,所以答案来自@revo:Insert mysql on foreign key id php,但是使用的是本地数据文件中的字段,而不是单独的表。

注:大小写敏感事项!我已经定义了基于

代码语言:javascript
复制
CHARACTER SET utf8 COLLATE utf8_bin
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-11 15:28:07

您可以使用SET子句。还要注意行终止器( Windows中的\r\n):

代码语言:javascript
复制
LOAD DATA LOCAL INFILE 'path-to-file' 
INTO TABLE `b1`
LINES TERMINATED BY '\n'
(@word)
SET `wid` = (SELECT `id` FROM `DICTINARY` `d` WHERE BINARY `d`.`word` = @word);
票数 1
EN

Stack Overflow用户

发布于 2018-06-12 04:48:59

  1. 将新列表添加到一个额外的表中,该表对id有一个额外的列,默认为LOAD
  2. INSERT .. SELECT .. WHERE .. NULL在字典中插入任何新单词。
  3. 执行一个多表UPDATE来为所有单词提取ids。这将进入额外的列。
  4. 继续做您需要做的任何事情--比如将数据(使用id而不是word)复制到其他表中。

我将介绍更详细的http://mysql.rjweb.org/doc.php/staging_table#normalization

同时,确保在任何存在的表中在COLLATION列上都有相同的word (例如,utf8_bin)。

如果排序规则匹配,并且字典在word上有一个索引,对于您的应用程序来说应该是相当快的。

不匹配的排序会导致索引的不使用,这将是非常缓慢的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50800396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档