Sql 带NULL的外部联接

Sql 带NULL的外部联接,sql,postgresql,join,Sql,Postgresql,Join,我使用的是Postgresql,有两个表,如下所示: Nodes Node_Properties ----- --------------- id id attr1 name attr2 value 节点属性表中的数据如下所示: id name value ---- ---- ----- 1465 car 2 146

我使用的是Postgresql,有两个表,如下所示:

Nodes             Node_Properties
-----             ---------------
id                id
attr1             name
attr2             value
节点属性表中的数据如下所示:

id       name     value
----     ----     -----
1465     car      2
1465     boat     1
如果没有与id关联的bike属性,我希望返回空白

select p.value, n*  from nodes n
  RIGHT OUTER JOIN node_properties p on n.id=p.id
  where p.name = 'bike';
不返回任何内容

select p.value, n*  from nodes n
  RIGHT OUTER JOIN node_properties p on n.id=p.id;
返回

2   1465  attr1   attr2
1   1465  attr1   attr2
我期待着结果:

-   1465  attr1   attr2
where '-' == empty

我想你需要一个
左连接

select n.*, p.value 
from nodes n left join
     node_properties np
     on n.id = np.id and p.name = 'bike';

我认为您对外部联接/组合的实际作用有误解。外部联接(左或右)返回一侧的数据,即使另一侧的数据不存在。您在数据中所做的任何操作都不会出现在结果集中。如果你需要一个事实上并不存在的特殊产品,你需要引入它。我想不出它背后有什么目的。你可以得到你想要的,如下所示:

with np (id, name, value) as
     (select id, name, value
        from node_properties
      union 
      -- bike must appear in the output so generate a row if it doesn't exist.
      select null, 'bike', null 
      where not exists 
            (select null
               from node_properties
              where name = 'bike'
            )  
     )
select n.id      node_id 
     , n.name    node_name
     , np.name   properties_name
     , np.value  properties_value
  from np 
  left join nodes n on np.id = n.id
 order by n.id nulls first;

您是否在
node\u properties
中有
名称为
bike
的记录?你确定吗?不确定。如果节点_属性的“bike”记录不存在,我想在第一列中返回一个空值。它怎么知道从节点表中为不存在的bike条目获取1465 n.id?n.id 1465没有与bike对应的记录,其他id将定义bike属性。请通过编辑而不是评论进行澄清。请解释你为什么期待你所期待的,或者我们无法解决你的误解。请在代码问题中给出一个——包括剪切、粘贴、可运行代码和最小代表性示例输入代码。对于包含DDL(包括约束和索引)和以代码格式作为表输入的SQL。这仅在bike的记录存在时对我有效。当记录不存在时,它不会返回记录。@GeorgeHernando。这将返回
节点中的每一行。“这不是你想要的吗?”乔治·埃尔南多·戈登的回答在我看来是对的。如果这不是您想要的,请单击并解释原因,以及您的确切要求。请参阅@Belayer的解决方案。这正是我想要的。不幸的是,像这里这样对外部连接的模糊、零碎的描述导致人们不理解它们。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。(见我对这个问题的评论)谢谢。正是我要找的。