sql - 查询应返回 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
都是字符类型。
正如我所说,我正在学习它,所以如果可以的话,请稍微深入地回答你的答案。谢谢,麻烦您了。
解决方案
没有以下行:
WHERE super_ssn = ssn;
该WHERE
子句仅考虑同一行中的值。因此,您的查询不返回任何行。
我怀疑你想要IN
或EXISTS
:
SELECT e.fname, e.lname
FROM employee e
WHERE EXISTS (SELECT 1
FROM employee e2
WHERE e2.super_ssn = e.ssn
);
推荐阅读
- ruby-on-rails - 安全公告:GHSA-cfjv-5498-mph5 actionview (RubyGems)
- gitlab - Gitlab 无法删除 ssh 密钥。不在 UI 中,但仍然有效
- reactjs - 如果我不想再在下拉列表中过滤,如何返回默认产品列表
- laravel - 无法在 Laravel Homestead 上安装 Socialite:内存限制错误
- automated-tests - Cy.click 失败,因为目标元素被禁用或其部分可见
- django - 无法通过 group_send 向 Django 频道发送消息
- scala - http4s 中的自定义普罗米修斯指标
- java - org.mongodb.driver.connection : 连接池后台维护任务 com.mongodb.MongoSocketOpenException 抛出异常
- c# - C# WriteAllText 仅以编码 UTF8 格式写入
- java - Tomcat 服务器无法启动