来自两个表的SELECT数据为NULL

时间:2019-05-30 10:16:22

标签: oracle plsql

我试图写两个表的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 个答案:

答案 0 :(得分:2)

空的第一个结果集表示AUTO.SIFRAD表中没有记录与AUTO.KPOL表中的任何记录匹配,该记录在2013年也有一个DAT_IZD日期。您可以通过将查询改写为左联接,并将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表中的所有记录。