Sql Postgres内连接

Sql Postgres内连接,sql,postgresql,Sql,Postgresql,在我的查询中,我只想在第一个表的指定列为null时连接表。我怎样才能加入。这是一个内部联接,共有3个表 这是我的问题 SELECT item_id,item_name FROM item i INNTER JOIN supplier s ON i.item_id=s.items_id INNER JOIN order O ON O.id=s.req_id WHERE price>400 AND category='ALL'; 只有在item表中的“item\u order\u id

在我的查询中,我只想在第一个表的指定列为null时连接表。我怎样才能加入。这是一个内部联接,共有3个表

这是我的问题

SELECT item_id,item_name
  FROM item i
INNTER JOIN supplier s ON i.item_id=s.items_id
INNER JOIN order O ON O.id=s.req_id
WHERE price>400 AND category='ALL'; 

只有在item表中的“item\u order\u id”列为空时,此联接才可用。如果该列不为null,则不能执行此连接。我可以在Postgres中做什么(我使用Postgres 8)

选项1。将条件放入WHERE子句中:

SELECT item_id,item_name
  FROM item i
INNER JOIN supplier s ON i.item_id=s.items_id
INNER JOIN order O ON O.id=s.req_id
WHERE price>400 AND category='ALL' AND i.item_order_id IS NULL; 
备选案文2。将条件放入联接中:

SELECT item_id,item_name
  FROM item i
INNER JOIN supplier s ON i.item_id=s.items_id AND i.item_order_id IS NULL
INNER JOIN order O ON O.id=s.req_id
WHERE price>400 AND category='ALL' ; 

在where子句中添加
和i.item\u order\u id为NULL
,“Postgres 8”包括五个主要版本(8.0、8.1、8.2、8.3和8.4)-您应该说明您的确切版本。还要注意的是,目前只支持8.4(但只支持几个月),因此您应该真正计划升级到当前(例如9.3)版本。我使用8.0.3。版本升级是个好主意。但对于我的系统环境,我必须保持当前版本。谢谢回复。然而,我在函数中使用这个查询。仅当项目\u订单\u id为空时,才应发生此连接。我们不能把这个连接放在where子句中吗?我的意思是这样的,在函数内部,在where子句的情况下,当item\u order\u id为NULL时..我不明白您关心的是什么。选项2只连接项目\订单\ id为空的记录。两个选项产生相同的结果。可能存在性能问题,因此如果您担心这一点,您应该检查这两个选项的解释计划(对照完全加载的表)。@klaslindb228 ck:不,没有性能问题。这两个查询将生成完全相同的计划。