【问题标题】:SQL Select with broken table relationship表关系损坏的 SQL 选择
【发布时间】: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


【解决方案1】:

按照@sgeddes 的建议,我使用了LEFT JOIN,然后问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2013-10-30
    相关资源
    最近更新 更多