我在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,但我不知道如何绕过这个。
无论如何要解决它?
答案 0 :(得分:0)
正如@sgeddes建议的那样,我使用LEFT JOIN
然后问题就解决了。