如何创建外键?

时间:2015-10-29 06:18:57

标签: mysql sql-server database

关于外键有很多解释,但是没有一个可以解释,或者我很难理解它。

我用this tutorial花了大约一个小时,但示例表和其他表的项目在那里有SAME名称。所以示例代码没用,让我感到困惑。

这是我的问题。我有两个包含这些行的表:

主表 songs_tbl

id
region_id

region_tbl

regionId
region_txt

我可以使用MS Access轻松地在 region_id 字段中显示区域的文本。我怎么能在MySQL中这样做?我怎样才能创建内部或左侧连接?

编辑:我想创建一个组合框,其中包含region_tbl中region_txt的值。这可能吗?我正在使用EMS Manager for MySQL。

这是我需要组合框的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:1)

id |名字|当然
----- | ---------------- | -------------------
1 |爱丽丝| 1
2 |鲍勃| 1
3 |卡罗琳| 2
4 |大卫| 5
5 |艾玛| (NULL)

id |名称
----- | ----------------
1 | HTML5
2 | CSS3
3 | JavaScript的
4 | PHP
5 | MySQL的

SELECT user.name, course.name FROM `user` LEFT JOIN `course` on user.course = course.id;

猜猜这是你在谈论哪些结果的例子;

user.name | course.name
--------------- | ----------------
爱丽丝| HTML5
鲍勃| HTML5
Carline | CSS3
大卫| MySQL的
艾玛| (NULL)

正如你所说的那样令人困惑的是两张桌子都有相同的标题。
所以让我们改变这个例子如下;

user_id | user_name | user_course_id
------------ | ------------------------ | ------------ -------
1 |爱丽丝| 1
2 |鲍勃| 1
3 |卡罗琳| 2
4 |大卫| 5
5 |艾玛| (NULL)

course_id | course_name
--------------- | ----------------
1 | HTML5
2 | CSS3
3 | JavaScript的
4 | PHP
5 | MySQL的


然后查询将更改为

SELECT user.user_name, course.course_name FROM user LEFT JOIN course on user.user_course_id = course.course_id;

这会给你结果;
user.user_name | course.course_name
----------------------- | ----------------
爱丽丝| HTML5
鲍勃| HTML5
Carline | CSS3
大卫| MySQL的
艾玛| (NULL)


如果要为结果表的列命名,请将查询更改为;

SELECT user.user_name AS new_user_name, course.course_name AS new_course_name FROM user LEFT JOIN course on user.user_course_id = course.course_id;


结果将改为;

new_user_name | new_course_name
----------------------- | ----------------
爱丽丝| HTML5
鲍勃| HTML5
Carline | CSS3
大卫| MySQL的
艾玛| (NULL)

答案 1 :(得分:0)

以下选择应该执行您要归档的内容。

SELECT region_tbl.region_txt
FROM `region_tbl`
INNER JOIN `songs_tbl` ON region_tbl.regionId = songs_tbl.region_id
WHERE songs_tbl.id =5;

翻译:

  

请列出region_txt的所有region_tbl值列表   使用songs_tbl查找相应的regionId
  表songs_tbl id为5"