【问题标题】:0 rows returned, why?返回 0 行,为什么?
【发布时间】:2021-05-06 00:18:22
【问题描述】:

谁能帮我理解为什么我返回 0 行?以下是我的查询:

SELECT s.firstname, s.lastname, s.studentprogram
 FROM student s
  WHERE s.studentprogram =
  (SELECT p.ProfessorProgram 
     FROM professor p 
       WHERE p.ProfessorProgram LIKE 'C_');

问题内容如下:创建一个查询/子查询以显示学生的名字、姓氏和程序。程序必须与教授表中的程序相同,并且教授的程序以“C”开头。此查询将使用子查询而不是联接。

表:学生

列:studentno、studentprogram、phoneno、age、firstname、lastname

表:教授

列:ProfessorId、ProfessorProgram、PhoneNo、Age、ProfessorName

【问题讨论】:

    标签: mysql sql database subquery wildcard


    【解决方案1】:

    表达式:

    WHERE p.ProfessorProgram LIKE 'C_'
    

    正在检查ProfessorProgram 是否以'C' 开头,并且它正好有两个字符。

    这个问题的意思大概是:

    WHERE p.ProfessorProgram LIKE 'C%'
    

    我不知道这是否是真正想要的问题。因为你可以只检查学生的程序。并且“程序代码”似乎是链接这两个表的一种奇怪方式。但是,如果只有这两个表,那么这就是唯一的选择。

    【讨论】:

    • 我得跟教授澄清一下。我将“C_”切换为“C%”,但它返回错误代码:1242 子查询返回超过 1 行
    • @SteveWong 。 . .使用IN 而不是=
    • 返回 0 行,是我的“WHERE s.studentprogram”的问题吗?
    【解决方案2】:

    我认为您正在寻找这样的查询:

    SELECT s.firstname, s.lastname, s.studentprogram
     FROM student s
      WHERE s.studentprogram IN
      (SELECT p.ProfessorProgram 
         FROM professor p 
           WHERE p.ProfessorProgram LIKE 'C%');
    

    我在 Gordan 的第一个答案中看到您的 cmets,如果 = 导致错误 Subquery returns more than 1 row 则使用 IN 不应返回 0 行。如果它仍然发生,你介意分享你在表格中的数据吗?仅当以 C 开头的 ProfessorProgram 没有与之关联的学生时才会发生这种情况。

    希望我们能明确我们的观点并正确回答您的问题。

    【讨论】:

    • 啊,这是一个小小的修复!感谢您的帮助
    • 乐于助人!您能否将有用的评论标记为答案,以便将来可以帮助其他面临同样问题的人?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2022-01-23
    • 1970-01-01
    • 2011-03-01
    • 2011-07-01
    • 2011-01-17
    • 2018-04-05
    相关资源
    最近更新 更多