ВЫБЕРИТЕ данные из двух таблиц получить NULL - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь написать оператор SELECT (JOIN) для двух таблиц.Во-первых, это таблица KPOL, во-вторых, SIFRAD, и я хочу отобразить всех сотрудников, которые выпустили политику в 2013 году. Когда я набираю запрос таким образом, ничего не происходит

SELECT P.SIFRA_RAD, S.IME, P.DAT_IZD
FROM AUTO.SIFRAD S, AUTO.KPOL P
WHERE S.IME = P.SIFRA_RAD AND EXTRACT(YEAR FROM P.DAT_IZD)= '2013'

Но когда я выбираю DAT_IZD, я получаю кучу данных

SELECT DAT_IZD
FROM AUTO.KPOL
WHERE EXTRACT(YEAR FROM DAT_IZD)='2013' ORDER BY DAT_IZD ASC

Понятия не имею, где я ошибаюсь.Запрос выглядит нормально, но ничего не возвращает.Любое предложение и комментарий, где я сделал ошибку?

ОБНОВЛЕНИЕ

Я хочу показать, какая политика выпуска сотрудников в 2013 году.Первая таблица - это KPOL, которая содержит DAT_IZD (дата выпуска). Вторая - это AUTO.SIFRAD, которая является таблицей Employee, которая содержит SIFRA_R и IME, а SIFRA_R является ключом в таблице AUTO.KPOL, которая содержит SIFRA_RAD в изображении, которое вы можете видеть, все детали

"SIFRA_RAD"  "IME"      "DAT_IZD"

"00456"     "Test"      "1.3.2013"
"00465      "Test123"   "1.3.2013"
"00469"     "Test111"   "1.3.2013"

1 Ответ

2 голосов
/ 30 мая 2019

Пустой первый результирующий набор указывает на то, что в таблице AUTO.SIFRAD нет записи, которая соответствует какой-либо записи в таблице AUTO.KPOL, которая также имеет дату DAT_IZD в 2013 году. Эту проблему можно решить, перефразировав запрос в виде левого соединения и путем перемещения логики WHERE в предложение ON:

SELECT P.SIFRA_RAD, S.IME, P.DAT_IZD
FROM AUTO.SIFRAD S
LEFT JOIN AUTO.KPOL P
    ON S.IME = P.SIFRA_RAD AND EXTRACT(YEAR FROM P.DAT_IZD) = 2013;

Здесь все равно не должно отображаться никаких данных для столбца DAT_IZD, но по крайней мере он будет возвращать все записи из таблицы AUTO.SIFRAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...