首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用WHERE语句在循环中插入INSERT table (以填充外键列)

使用WHERE语句在循环中插入INSERT table (以填充外键列)
EN

Stack Overflow用户
提问于 2019-04-28 01:18:32
回答 2查看 253关注 0票数 0

我正在尝试为一个学校项目创建一个数据库,并且必须使用多个外键。我已经添加了原始数据,我想知道如何动态填充外键列。

例如,我有一个city表和一个country表。city表有一个country_id列,该列将包含来自country表中右侧条目的id

目前,表city具有以下列:

id

name

code (就像美国的“USA”和国家有相同的信息,我正在考虑用它作为WHERE语句的标识符)

country_id

我是一个完全的mySql新手,现在感觉完全迷失了方向!

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-29 10:02:33

在标准化之前,可以使用平面文件来描述城市和州数据:

代码语言:javascript
复制
id city       code country
 1 Amsterdam  NED  Netherlands
 2 Anvers     BEL  Belgium
 3 Athènes    GRE  Greece
 4 Atlanta    USA  United States
 5 Barcelone  ESP  Spain

对于这些数据,不需要更多的标准化。事实上,这会适得其反。

但是,如果您希望存储不希望在每个城市的记录中重复的有关国家的信息,该怎么办?也就是说,你想要保持人口数量,犯罪率,货币名称...管他呢。您不会希望将该信息与引用国家的每条记录一起存储;这将是大量重复的信息,如果您想要更新国家的数据,则必须在该国家中有城市的每条记录中进行更改。

这就是外键概念发挥作用的地方。您可以将其拆分为两个不同的表: city和country。关于城市的特定信息(城市名称等)进入城市表,而特定于国家的信息(国家人口、货币名称等)进入国家表。

但是现在,我们如何填充表呢?

在基于web的环境中,通常会有一个数据输入页面,其中包含城市名称的输入,以及国家/地区的下拉框(或AJAX查找),值为国家名称的id。这样,当您提交城市和国家对时,您就有了要插入城市名称的国家id。

但在本例中,您已经填充了city和country表。为了使用国家/地区id更新城市表,您必须能够连接表。幸运的是,您在国家/地区代码中有这样一个字段。这是一个令人高兴的意外,因为这实际上是不应该出现在城市表中的重复信息...更不用说依赖varchar字段来连接真的不是一个好主意(很难保证值是相同的)

但是既然它存在,那就让我们使用它吧!

首先,如何连接表?你在他们共享的领域加入他们。

给定:

代码语言:javascript
复制
City:
id  name      code  country_id 
 1 Amsterdam  NED 
 2 Anvers     BEL 
 3 Athènes    GRE 
 4 Atlanta    USA 
 5 Barcelone  ESP 


 Country
 id  name       code 
  1 Afghanistan AFG 
  2 Albanie     ALB 
  3 Algérie     ALG 
  4 Andorre     AND 
  5 Angola      ANG 
  ...
  20 Belgium    BEL
  ...
  30 Netherlands NED
代码语言:javascript
复制
SELECT CITY.*, COUNTRY.*
FROM CITY
INNER JOIN COUNTRY ON CITY.CODE = COUNTRY.CODE

结果(只有两个与我显示的结果集匹配):

代码语言:javascript
复制
 1 Amsterdam  NED null 30 Netherlands NED
 2 Anvers     BEL null 20 Belgium     BEL  

现在可以连接这两个表了,可以基于该数据更新城市表了。MySql有自己的方法来做到这一点:

代码语言:javascript
复制
UPDATE CITY
INNER JOIN COUNTRY ON CITY.CODE=COUNTRY.CODE
SET CITY.COUNTRY_ID = COUNTRY.ID

(参见MySQL - UPDATE query based on SELECT Query)

票数 1
EN

Stack Overflow用户

发布于 2019-04-28 01:28:06

您只需从城市表中选择所有城市,并将代码与国家/地区表中的代码进行比较,当找到匹配时,将country_id插入城市表中。我希望它能对你有所帮助。

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

https://stackoverflow.com/questions/55883041

复制
相关文章

相似问题

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