Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择并返回未知数量的相关外键_Mysql_Sql_Join_Foreign Keys - Fatal编程技术网

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语句中执行此操作而不返回冗余信息?

只需使用联接:

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