Запрос возвращает 0 строк, когда он должен вернуть n результатов - PullRequest
0 голосов
/ 11 апреля 2020

Я изучаю 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)

Почему это так?

Столбец ssn и столбец super_ssn являются оба типа символов.

Как я уже сказал, я изучаю это, так что, если можете, ответьте немного подробнее. Пожалуйста и спасибо.

1 Ответ

2 голосов
/ 11 апреля 2020

Нет строк, в которых:

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
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...