MySQL选择并返回未知数量的相关外键
我在数据库中有两个表,看起来像这样 课程:MySQL选择并返回未知数量的相关外键,mysql,sql,join,foreign-keys,Mysql,Sql,Join,Foreign Keys,我在数据库中有两个表,看起来像这样 课程: IX课程(主键) enType(枚举:3个可能的值) 冲绳(弦) 针(线) sWhen(字符串) 数据描述(字符串) 项目: ixItem(主键) ixCourse(外键参考课程.ixCourse) 闪烁(布尔值) 女鞍(弦) 数据描述(字符串) 在这个设置中,我可以有一个给定的课程,也可以有多个与任何课程相关的项目。每个课程没有统一数量的项目。我是否需要执行单独的查询来提取每个课程的所有相关项目,或者我可以在一个select语句中执行此操作而
- IX课程(主键)
- enType(枚举:3个可能的值)
- 冲绳(弦)
- 针(线)
- sWhen(字符串)
- 数据描述(字符串)
- ixItem(主键)
- ixCourse(外键参考课程.ixCourse)
- 闪烁(布尔值)
- 女鞍(弦)
- 数据描述(字符串)
SELECT * FROM Course C
JOIN Item I ON C.ixCourse=I.ixCourse
是的,您将获得重复的课程信息。。如果不进行两次查询,就无法只返回一行课程数据,然后返回多个项目行。您可以在一个查询中只返回一个课程的项目,如果您是这样要求的。不清楚您想要什么作为输出,但是:
SELECT c.*, i.*
FROM COURSE c
LEFT JOIN ITEM i ON i.ixcourse = c.ixcourse
…将返回所有课程以及与课程相关的任何项目。如果课程没有与之相关的项目,则输出中的项目列将为空。也就是说,如果有多个项目与课程列相关,那么课程列将包含重复的值——但项目列将不同
如果您只需要包含项目的课程列表,请使用:
SELECT c.*, i.*
FROM COURSE c
JOIN ITEM i ON i.ixcourse = c.ixcourse
什么是加入?
这是一个不返回冗余信息的。
?如果你的意思是不重复课程的细节,那么不-不容易在一个查询有一些可怕的查询(就想法和代码而言)返回以下内容:但我不建议探索它
ixCourse, enType .. , ixItem, sDescription
1 1 1 first for course 1
2 Second for course 1 << notice no course details
2 1 3 first for course #2
在这里,我使用了左连接
,这可能会产生这种情况(例如,课程2没有项目)
ixCourse,enType,ixItem,sdesdescription
1课程1的第一部分
1 2秒课程1谢谢Richard-这是很多可靠的信息。这正是我想要的,还有一些需要澄清的问题。我基本上是在使用您已经列出的查询,但知道这是正常的做法,并且知道应该以何种方式进行才是我所需要的。谢谢Rohjayhehe-你相信我昨晚把那页书签了吗?谢谢你的信息,我的小马。完全正确
ixCourse, enType .. , ixItem, sDescription
1 1 1 first for course 1
1 1 2 Second for course 1 << course details repeated per item
2 1 3 first for course #2
select c.*, i.*
from course c
left join item i on c.ixCourse = i.ixCourse
ixCourse, enType .. , ixItem, sDescription
1 1 1 first for course 1
1 2 Second for course 1 << course details repeated
2 1 NULL NULL << nothing for item columns
3 1 4 first for course #3