2010-07-16 78 views
1

您好我有2個表。我想列出外連接與在返回空值

  1. table1中的所有記錄中存在的 表2
  2. 在表2中不存在與table1的所有記錄條件

空行將通過表1返回在第二種情況下,但我無法使查詢正常工作。它只返回空行

SELECT 
    A.CLMSRNO,A.CLMPLANO,A.GENCURRCODE,A.CLMNETLOSSAMT, 
    A.CLMLOSSAMT,A.CLMCLAIMPRCLLOSSSHARE 
FROM 
    PAKRE.CLMCLMENTRY A 
RIGHT OUTER JOIN (
    SELECT 
     B.CLMSRNO,B.UWADVICETYPE,B.UWADVICENO,B.UWADVPREMCURRCODE, 
     B.GENSUBBUSICLASS,B.UWADVICENET,B.UWADVICEKIND,B.UWADVYEAR, 
     B.UWADVQTR,B.ISMANUAL,B.UWCLMNOREFNO 
    FROM 
     PAKRE.UWADVICE B 
    WHERE 
     B.ISMANUAL=1 
) r 
ON a.CLMSRNO=r.CLMSRNO 

ORDER BY 
    A.CLMSRNO DESC; 
+0

在你soec中你談論table1和table2,並暗指一個未指定的WHERE子句。請說明哪個表是您的查詢中的哪個表。按照規範是否PAKRE.CLMCLMENTRY table1或table2? – onedaywhen 2010-07-16 09:04:02

回答

0

你正在使用哪個操作系統?

Table aliases are case sensistive on some platforms,這就是爲什麼你的加入條件ON a.CLMSRNO=r.CLMSRNO失敗。

嘗試用A.CLMSRNO=r.CLMSRNO,看看是否能工程

+0

嗨,我正在使用DB2。在我看來,因爲空行被完全過濾掉了。 編輯 -----好吧,我想通了查詢是不正確的,因爲我想用兩個表 – 2010-07-16 05:33:50

+0

的組合結果如果你想通了,請編輯您的帖子這樣說。 – Nubsis 2010-07-16 07:35:19

0

我不理解你的第一次嘗試,但這裏基本上你需要什麼,我想:

SELECT * 
FROM TABLE1 
INNER JOIN TABLE2 
    ON joincondition 

UNION ALL 

SELECT * 
FROM TABLE2 
LEFT JOIN TABLE1 
    ON joincondition 
    AND TABLE1.wherecondition 
WHERE TABLE1.somejoincolumn IS NULL 
+0

嗨我的查詢問題是,它只是從table2返回正確的行。但是表2中table1中的所有行都不返回。 將UNION刪除重複?此外,我必須在UNION的情況下使列數相同。 – 2010-07-16 05:44:46

+0

如果沒有返回的行從表1還表2中,你有你的加入條件的問題在INNER JOIN。 UNION刪除重複項目,UNIONA ALL不會。如果你需要兩套不同的模式,那麼按照定義,它們需要是兩套不同的套件,並且你不能使用UNION或者將它們放在一個套件中。 – 2010-07-16 14:44:02

0

我想你可能想要刪除的子查詢並將其列放入主查詢中,例如

SELECT A.CLMSRNO, A.CLMPLANO, A.GENCURRCODE, A.CLMNETLOSSAMT, 
     A.CLMLOSSAMT, A.CLMCLAIMPRCLLOSSSHARE, 
     B.CLMSRNO, B.UWADVICETYPE, B.UWADVICENO, B.UWADVPREMCURRCODE, 
     B.GENSUBBUSICLASS, B.UWADVICENET, B.UWADVICEKIND, B.UWADVYEAR, 
     B.UWADVQTR, B.ISMANUAL, B.UWCLMNOREFNO  
    FROM PAKRE.CLMCLMENTRY A 
     RIGHT OUTER JOIN PAKRE.UWADVICE B 
      ON A.CLMSRNO = B.CLMSRNO 
WHERE B.ISMANUAL = 1 
ORDER 
    BY A.CLMSRNO DESC; 
+0

謝謝你的回覆,當table1是clmclmentry而table2是uwadvice時。通過你的解決方案,查詢的第一部分(表1的所有列)都有空值。其餘的是正確的。 – 2010-07-16 09:26:10

+0

嘗試'ISMANUAL = 1'謂詞移動到'WHERE'條款(心中已經相應地編輯我的回答)。 – onedaywhen 2010-07-16 10:37:39