我需要两个表MINUS组合的笛卡尔积,其中两个表在一个字段中具有相同的值。
SELECT
table1.field1,
table1.field2,
table2.field3,
table2.field4
FROM
table1, table2
WHERE
table1.field1 <> table2.field3;
现在,让我们假设table1和table2每个都有一百万条记录,并且这些字段已编入索引。 在合理的时间内检索结果集的最有效方法是什么? 有没有更好的方法来编写此查询?
答案 0 :(得分:1)
除了问题中已经给出的方法之外,我能想到的唯一方法是
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;
假设field1
和field3
被编入索引,并且数据库对完整的笛卡尔联接进行了一些优化,那么可能更快,它可能会运行完全相同方式(使用EXPLAIN
),可能会更糟!