首页 > 解决方案 > 查询应返回 n 个结果时返回 0 行

问题描述

我正在学习SQL使用PostgresSQL.

我有一个非常简单的查询,据我了解应该返回 3 个结果。

这是表格(简化了,因为我解析的那个都搞砸了):

  fname   |  lname  |    ssn    | super_ssn 
----------+---------+-----------+-----------
 James    | Borg    | 888665555 | 
 John     | Smith   | 123456789 | 333445555
 Franklin | Wong    | 333445555 | 888665555
 Alicia   | Zelaya  | 999887777 | 987654321
 Jennifer | Wallace | 987654321 | 888665555
 Ramesh   | Narayan | 666884444 | 333445555
 Joyce    | English | 453453453 | 333445555
 Ahmad    | Jabbar  | 987987987 | 987654321

所以,通过调查,我知道那里有三个名字应该是经理,因为它们出现在 super_ssn 列中。

当我做:

SELECT fname, lname
FROM employee
WHERE super_ssn = ssn;

我明白了

 fname | lname 
-------+-------
(0 rows)

这是为什么?

columnssn和 columnsuper_ssn都是字符类型。

正如我所说,我正在学习它,所以如果可以的话,请稍微深入地回答你的答案。谢谢,麻烦您了。

标签: sqlpostgresql

解决方案


没有以下行:

WHERE super_ssn = ssn;

WHERE子句仅考虑同一行中的值。因此,您的查询不返回任何行。

我怀疑你想要INEXISTS

SELECT e.fname, e.lname
FROM employee e
WHERE EXISTS (SELECT 1
              FROM employee e2
              WHERE e2.super_ssn = e.ssn
             );

推荐阅读