Informix查询奇怪

时间:2010-09-01 14:13:58

标签: informix

我正在针对Informix数据库运行2个查询。查询正在使用内部和外部联接命中4个不同的表。我认为他们应该返回相同的结果集,但我得到3记录差异。这两个查询如下所示:

查询1(返回65行) -

 select ...  
    from table1, table2, outer table3, outer table4
   where table1.id = table2.id
     and table1.id = table3.id
     and table1.id = table4.id 
     and .....

查询2(返回62行) -

select ....
from table1 inner join table2 on table1.id = table2.id
left outer join table3 on table1.id = table3.id
left outer join table4 on table1.id = table4.id
where .....

有没有人知道为什么这两个会返回不同的结果集?我假设通过更改使用内部联接/左外部联接而不是仅使用外部(并且没有内部联接)将返回相同的结果。

1 个答案:

答案 0 :(得分:2)

WHERE子句的内容可能是其中的一个因素。第一种表示法,即Informix样式的OUTER连接符号,是非标准的,并且具有相当特殊的语义(这是礼貌的)。第二种表示法是ISO标准的OUTER JOIN,它规定了语义。

使用Informix样式的连接,内部连接的表对中的所有行都将在结果集中返回,这些表在WHERE子句中仅在其列上的任何过滤器中生效。如果WHERE子句中的外部连接表中的列或内部表和外部表之间存在过滤器,那么这些过滤器可能会从结果集中删除一些可能的行,但结果的内部连接部分将仍然出现空值扩展。解释起来非常复杂。它或多或少都有意义,但结果不仅仅是对基本连接集的限制的预测

您能否确认WHERE子句包含table3和table4中列的某些条件?

使用ISO标准OUTER JOIN表示法模拟Informix样式的OUTER连接并不是一种简单的方法。