Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
使用join和where?MySQL_Mysql_Sql_Database_Join_Where - Fatal编程技术网

使用join和where?MySQL

使用join和where?MySQL,mysql,sql,database,join,where,Mysql,Sql,Database,Join,Where,有人问了我一个问题: 获取学员编号和姓名以及参加过模块但成绩不合格的学员的模块代码和名称 我的表格是,模块,学员,课程,课程 表列 delegate(name,number) Take( grade,number, Course) module(code,Name,cost,credits) 这就是我到目前为止所做的: SELECT delegate.no, delegate.name, module.code, module.name AS C

有人问了我一个问题:

获取学员编号和姓名以及参加过模块但成绩不合格的学员的模块代码和名称

我的表格是,
模块
学员
课程
课程

表列

delegate(name,number) 
Take( grade,number, Course) 
module(code,Name,cost,credits)
这就是我到目前为止所做的:

SELECT delegate.no,
       delegate.name, 
       module.code,
       module.name AS Course
FROM delegate 
INNER JOIN module,take
WHERE grade  <40;
选择delegate.no,
delegate.name,
模块代码,
module.name作为课程
来自代表
内部连接模块,取
哪里等级试试这个

SELECT delegate.name,
       module.code, 
       module.name,
       delegate.no 
FROM module 
INNER JOIN take 
ON module.code = take.code 
INNER JOIN delegate 
ON delegate.no = take.no 
WHERE grade<40;
选择delegate.name,
模块代码,
module.name,
代表编号
来自模块
内接取
ON module.code=take.code
内部联接委托
在delegate.no=take.no上
其中等级
选择delegate.no,
delegate.name,
模块代码,
module.name
来自代表
delegate.name=module.name上的内部联接模块
内部连接接受模块。名称=接受课程
其中,等级<40;

您应该告诉更多关于表结构的信息。抱歉,刚刚更改了它,我是新的sorry@a_horse_with_no_name没错,但是初学者总是问这样的问题。你是说他们里面的数据吗?从他最初的问题我可以说,虽然他是网站的新用户,但他尊重提问的所有要求(解释他的问题,可能不详细,但困惑的人永远不知道什么样的细节是足够的,展示他迄今为止所做的努力,并寻求帮助)。因此,我不认为在这种情况下,向下投票是一种解决方案或鼓励。这个“论坛”应该是一个分享知识和解释的地方,而不是一个指指点点和获得赞成票的答案/评论的地方。我们应该回答并向他解释。它运行时没有错误,但在使用内部JOIN子句,它只返回在所联接的表之间具有相应连接的行。如果在表委托下有'chris',而在表模块下没有'chris',则不会有任何结果。请确保在所联接的表下有相应的值:)@OP更改您的列,这样您就不会在varchar或nvarchar字段上执行联接。@user3219120,是的,Martin所说的是解决问题的一种方法,因此您可以使用更简单的SQL语句,但如果您的问题必须与给定的表和列等内容相联系,那么你唯一的解决办法就是内部连接。是的,我被告知不要更改列
SELECT delegate.no,
   delegate.name, 
   module.code,
   module.name
FROM delegate
INNER JOIN module ON delegate.name = module.name
INNER JOIN take ON module.name = take.Course
WHERE take.grade  < 40;