完全加入多个表(postgresql)

时间:2015-04-21 10:04:07

标签: postgresql outer-join

在postgresql中我有4个表

 Table A:
 ----------- 
 a_id 
 a_date

 Table B 
 -----------
 a_id b_id

 Table C: 
 -------------------
 c_id 
 b_id 
 invoice_number

 Table D
 -------------------
 d_id 
 invoice_number 
 value_D

多条记录的值为

我想选择表A,表B,表C和表D,其中a_date在X和Y之间。 但是,我还想选择我的选择中未包含的所有其他值_(所以A innerjoin B innerjoin C full outerjoin D)

我的代码

SELECT 
   Table A, Table B, Table C, Table D
FROM 
   Table A
JOIN
   Table B ON A.a_id = B.a_id
JOIN
   Table C ON B.b_id = C.b_id
FULL OUTER JOIN
   Table D ON C.invoice_number = D.invoice_number
WHERE
   A.a_date BETWEEN X AND Y;

它只显示A.a_id的D.value_d,其中A.a_date BETWEEN X和Y. 不过我想也可以为A.a_id显示D.value_d,其中A.a_date也是其他。

我是一个新手,所以希望这是可以理解的,你可以帮助我。

提前致谢

2 个答案:

答案 0 :(得分:0)

您还可以向Where子句添加更多条件,例如: " a_date BETWEEN X和Y或a_date> ' 2015年4月21日'&#34 ;.这将检索两个条件的并集。

此致

答案 1 :(得分:0)

我想我解决了它。

SELECT Table A, Table B, Table C, Table D 
FROM Table A
JOIN Table B ON A.a_id = B.a_id
JOIN Table C ON B.b_id = C.b_id
JOIN Table D ON C.invoice_number = D.invoice_number
WHERE A.a_date BETWEEN X AND Y OR
D.value_D IN (SELECT D.value_D
             FROM Table D
             JOIN Table C ON D.invoice_number on C.invoice_number
             JOIN Table B ON C.b_id = B.b_id
             JOIN Table A ON B.a_id = A.a_id
             WHERE A.a_date BETWEEN X AND Y);

谢谢大家的帮助!