【问题标题】:using a join and a where ? MySQL [closed]使用 join 和 where ? MySQL [关闭]
【发布时间】:2014-01-21 12:16:38
【问题描述】:

这是我收到的问题:

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

我的表是 moduledelegatessessiontakecourse

表格列

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;

【问题讨论】:

  • 您应该详细说明您的表结构。
  • 抱歉刚刚改了,我是新的抱歉
  • @a_horse_with_no_name 没错,但是初学者总是会问这种问题。
  • 你的意思是里面的数据?
  • 从他最初的问题我可以说,虽然他是网站的新用户,但他尊重提出问题的所有要求(解释他的问题,可能不详细但困惑的人永远不知道多少细节是足够的,展示他到目前为止的尝试,并寻求帮助)。所以我不认为在这种情况下投反对票是一种解决方案或一种鼓励。这个“论坛”应该是一个分享知识和解释的地方,而不是一个互相指责和获得高票答案/cmets 的地方。我们应该只是回答和解释给他。

标签: mysql sql database join where


【解决方案1】:

试试这个...

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;

【讨论】:

  • 它运行没有错误,但只返回空值的列?
  • 当使用 INNER JOIN 子句时,它只返回在连接的表之间有相应连接的行。如果您在 Table 委托下有“chris”而在 Table 模块下没有“chris”,那么您将不会有任何结果。确保您在加入的表格下有相应的值:)
  • @OP 更改您的列,这样您就不会在 varchar 或 nvarchar 字段上进行连接。
  • @user3219120,是的,Martin 所说的是解决问题的一种方法,因此您将拥有更简单的 SQL 语句,但如果您的问题必须坚持给定的内容,例如表和列,那么您唯一的解决方案就是 INNER JOIN。
  • 是的,我被告知不要更改列
【解决方案2】:
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多