当前位置: 首页 > 面试题库 >

如何从其他表填充表的外键

乌修筠
2023-03-14
问题内容

我有下表,其中的表translation是空的,我正在尝试填充:

translation {
    id
    translated
    language_id
    template_id
}

language {
    id
    langname
    langcode
}

template {
    id
    tplname
    source
    domain
    total
}

要填充的源数据translation是我从外部CSV文件填充的临时表:

tmp_table {
    id
    translated
    langname
    tplname
    source
    domain
}

我想做的是translation用中的值填充tmp_table。该translated字段可以直接复制,但是我不太确定如何获取正确的内容language_id(可以使用tmp_table.langname确定language.id)和template_id(tmp_table.tplname,tmp_table.source,tmp_table.domain一起使用)确定template.id)。

这可能是一个琐碎的问题,但是我对SQL还是很陌生,因此不确定填充translation表的最佳查询是什么。有任何想法吗?


问题答案:

可以简化为:

INSERT INTO translation (id, translated, language_id, template_id)
SELECT tmp.id, tmp.translated, l.id, t.id
FROM   tmp_table tmp
JOIN   language l USING (langname)
JOIN   template t USING (tplname, source, domain)
ORDER  BY tmp.id

我添加了一个ORDER BY您严格不需要的子句,但是如果您以这种方式(或其他方式)插入集群数据,则某些查询可能会受益。

如果您想避免丢失在language或中找不到匹配行的行template,请使其 LEFT JOIN
代替JOIN两个表(前提是language_idtemplate_id可以为)NULL

除了我已经在先决问题下列出的内容之外:如果INSERT很大并且在目标表中占很大的比例,那么
删除 目标表上的 所有索引 并随后重新创建它们可能会更快。从头开始创建索引 快得多,然后每行都将对其进行增量更新。

唯一索引还充当约束,因此您必须考虑是稍后执行规则还是将规则留在原地。



 类似资料:
  • 作为我作业的一部分,我们得到了一个我们不能更改的接口,以及一些用来开发我们方法的预定义测试。 界面如下: 我正在运行的特定测试: 以及我需要从测试中创建的方法: 从测试中我可以看出,在方法中,我需要创建并用注册映射中匹配的学生填充它,然后返回列表。 我创建了以下字段:- 我搞不懂的是,如何将注册地图中的数据传递到学生列表中,以使测试中的断言为真。

  • 问题内容: 我目前正在使用Page_Load中的以下代码创建和读取DataTable 我想知道如何转换此代码,以便它从SQL查询中读取?我正在尝试下面的代码,但不确定如何连接它们,以便页面加载中的数据表使用下面的SQL命令填充。 我被困在: 我希望成为 问题答案: 您需要修改方法,并在其中添加“实验”代码,然后返回。

  • 在dataframe中,如何有条件地将一列的值填充为列表中另一列的值? 这与这个SO问题非常相似,但当我申请时: 我得到一个错误: 我想中的

  • 问题内容: 我想创建两个下拉列表,类别和项目。 如果我选择名为car的类别之一,则项目下拉列表应包含Honda,Volvo和Nissan。 如果我选择一个名为phone的类别,则项目下拉列表应具有此iPhone,Samsung,Nokia。 我怎样才能做到这一点?我知道我无法使用纯HTML做到这一点。 问题答案: 工作演示 (带有jquery) 更新 :使用eval()能够添加所需的任意数量的数组

  • 我需要滚动表来获取使用selenium和java绑定以及chrome驱动程序动态填充的表内容。这是另一个滚动,而不是窗口滚动本身。我能找到的所有可用的解决方案都是针对窗口滚动的。我在这里需要的是滚动桌子。我需要滚动突出显示的那个 我收到以下错误消息 错误消息:没有这样的元素:找不到元素:{“method”:“XPath”,“Selector”:“//*[@class='antiscroll-scr