我试图写两个表的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"
答案 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
表中的所有记录。