select 来自 2 个表的笛卡尔积,不等于 (<>) where 条件; postgresql

select cartesian product from 2 tables with not equal (<>) where condition; postgresql

我需要两个表的笛卡尔积减去组合,其中两个表在一个字段中具有相同的值。

SELECT 
    table1.field1,
    table1.field2,
    table2.field3,
    table2.field4
FROM 
    table1, table2
WHERE 
    table1.field1 <> table2.field3;

现在,我们假设 table1 和 table2 各有一百万条记录,并且这些字段已编入索引。 在合理的时间内检索结果集的最有效方法是什么? 有没有更好的方法来编写这个查询?

除了问题中已经给出的方法,我能想到的唯一方法是

SELECT 
  table1.field1,
  table1.field2,
  table2.field3,
  table2.field4
FROM 
  table1, table2
EXCEPT -- Postgresql, MINUS in Oracle
    SELECT 
  table1.field1,
  table1.field2,
  table2.field3,
  table2.field4
FROM 
  table1, table2
WHERE field1=field3;

假设 field1field3 被索引,并且数据库对完整的笛卡尔连接进行了一些优化,这 可能 更快,它可能运行 完全相同的方式(使用 EXPLAIN),而且可能更糟!