【发布时间】:2015-04-30 16:23:27
【问题描述】:
我在 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,一切正常。 在我看来,在某些记录中,where 子句“table4.condition = XX”是无法访问的,导致整个查询为 NULL,但我只是不知道如何解决这个问题。
有办法解决吗?
【问题讨论】:
-
尝试使用
LEFT JOIN而不是INNER JOIN来代替table2。听起来您在该表中没有相应的数据。 -
在不知道您的架构的情况下无法肯定地说,但@sgeddes 可能是正确的。所有过滤器和连接都找不到匹配项,这意味着您的逻辑有问题
-
@sgeddes 谢谢!有效!就我而言,我不得不离开加入所有表格然后它工作正常。
标签: sql postgresql null inner-join relationship