首页 文章

SQL选择具有损坏的表关系

提问于
浏览
0

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

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

它们通过每个表的PK和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

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

相关问题