返回 0 行,为啥?

Posted

技术标签:

【中文标题】返回 0 行,为啥?【英文标题】: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

【问题讨论】:

【参考方案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 没有与之关联的学生时才会发生这种情况。

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

【讨论】:

啊,这是一个小小的修复!感谢您的帮助 乐于助人!您能否将有用的评论标记为答案,以便将来可以帮助其他面临同样问题的人?谢谢!

以上是关于返回 0 行,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从应用程序调用 sql 过程返回 0 行?

为啥选择 NOT IN 返回 0 行,而实际上有很多结果

在 PHP 中,为啥 mysqli_num_rows 不为返回行数为 0 的查询返回整数?

为啥pandas.DataFrame.sum(axis=0) 在axis = 0代表行的每一列中返回值的总和?

为啥我的 plpgsql 函数不返回任何行

.net中ExecuteNonQuery方法,返回操作行数,用存储过程时,为啥总是返回-1呢