Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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_Left Join_Inner Join - Fatal编程技术网

Mysql 用连接表连接多对多

Mysql 用连接表连接多对多,mysql,sql,join,left-join,inner-join,Mysql,Sql,Join,Left Join,Inner Join,好吧,现在我不知道下一步该怎么办。我刚刚开始学习mySQL中的连接,我正在尝试通过它的连接表(多对多)关系连接两个表。但是我下面的例子没有提到任何关于多对多表的内容 我有三张桌子 1.)课程 2.)课程科目——连接表 id PK curriculumId FK subjectCode FK 3)主题 课程 id PK name description yearLevel syStart syEnd 课程科目--连接表 id PK curriculumId FK subjectCode FK

好吧,现在我不知道下一步该怎么办。我刚刚开始学习mySQL中的连接,我正在尝试通过它的连接表
(多对多)
关系连接两个表。但是我下面的例子没有提到任何关于
多对多
表的内容

我有三张桌子

1.)课程

2.)课程科目
——连接表

id PK
curriculumId FK
subjectCode FK
3)主题

课程

id PK
name
description
yearLevel
syStart
syEnd
课程科目
--连接表

id PK
curriculumId FK
subjectCode FK
主题

code PK
name
yrLevel
description
所需结果是在过程调用中显示科目代码科目名称科目描述科目年度级别(如果提供或提供了
课程名称
课程年度级别

这就是我所做的

CREATE PROCEDURE `getCurriculumSubjects` (IN p_CurcName varchar(50),IN p_yrLevel varchar(50))
BEGIN
    SELECT `subject`.`code`,`subject`.`name`,`subject`.yrLevel, `subject`.description
    FROM `subject`

    LEFT OUTER JOIN curriculumsubjects
    ON `subject`.`code` = curriculumsubjects.subjectCode

    LEFT OUTER JOIN curriculum
    ON curriculum.id = curriculumsubjects.curriculumId
    WHERE curriculumsubjects.id = (SELECT id FROM curriculum WHERE `name` = p_CurcName AND yearLevel = p_yrLevel);

END
目前,
课程
表上有一条记录,
科目
表上有两条科目记录

课程表屏幕截图

code PK
name
yrLevel
description

主题表屏幕截图

code PK
name
yrLevel
description

课程主题表屏幕截图

code PK
name
yrLevel
description

但是当我运行脚本时,我什么也得不到

我的意思是,如何正确使用左连接来解决此问题? 我可以加入更多的表而不是2个表吗

我非常感谢你的帮助


提前感谢。

我认为这达到了您的要求:

select s.code, s.name, s.description, s.yrLevel
from subject s
inner join curriculumsubject cs on s.code = cs.subjectCode
inner join curriculum c on cs.curriculumId = c.ID
where c.name = p_CurcName and c.yearLevel = p_yrLevel

我不认为左连接是合适的,除非你想返回主题的空值,当参数值存在于课程中,但没有指向主题的链接。如果只想在有匹配主题的地方返回行,则内部联接是正确的解决方案。

可以联接任意数量的表将
where
更改为
@草莓????抱歉,在何处/What调用存储过程时使用的参数是什么?问题是,
CoursulumSubjects.id
永远不会匹配
Coursuld.id
,结果将为空。有一次他们会在不吉利的情况下比赛,我们会被彻底击败需要
课程主题。课程ID
真的。非常感谢您的帮助。正如我提到的,我刚刚开始学习连接,您的解决方案帮助我完全理解简单的连接或内部连接。所以我首先分析了连接对表1和表2的影响,然后是表3。这对我帮助很大。再次感谢。