SQL选择具有损坏的表关系

时间:2015-02-27 20:39:10

标签: sql postgresql null inner-join relationship

我在Postgree上有一个表结构,如下所示:

Table1
    pktab1
    somedate
    valor
Table2
    pktab2
    fktab1
    valor
Table3
    pktab3
    fktab1
    fktab4
    valor
Table4
    pktab4
    condition

他们通过PK& amp;每张桌子的FK键。

字段 table1.value 控制我是否在table2或table3上有值。

table1.value = 1 | table2.value = NULL / table3.valeu = XX

table1.value = 2 | table2.value = XX / table3.valeu = NULL

我需要一个包含3列的结果表:table1.date,table2.value和table3.value

我正在尝试使用以下语法进行选择:

select 
    table1.somedate,
    table2.valor,
    table3.valor
from table1
   inner join table2 on (table2.fktab1 = table1.pktab1)
   inner join table3 on (table1.pktab1 = table3.fktab1)
   inner join table4 on (table3.fktab4 = table4.pktab4)
where 
      (table1.valor = 2 and table4.condition = 1)
       or 
      (table1.valor = 1)

但它只返回NULL值。 我也尝试过使用:

where   
    (table1.value = 1 and table4.condition = 1)
    or
    (table1.value = 2 and table4.condition IS NULL)

但也没有奏效。

如果从查询中删除Table2,则everthing工作正常。 在我看来,在某些记录中,where子句“table4.condition = XX”是不可缓存的,导致整个查询为NULL,但我不知道如何绕过这个。

无论如何要解决它?

1 个答案:

答案 0 :(得分:0)

正如@sgeddes建议的那样,我使用LEFT JOIN然后问题就解决了。