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;
假设 field1
和 field3
被索引,并且数据库对完整的笛卡尔连接进行了一些优化,这 可能 更快,它可能运行 完全相同的方式(使用 EXPLAIN
),而且可能更糟!
我需要两个表的笛卡尔积减去组合,其中两个表在一个字段中具有相同的值。
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;
假设 field1
和 field3
被索引,并且数据库对完整的笛卡尔连接进行了一些优化,这 可能 更快,它可能运行 完全相同的方式(使用 EXPLAIN
),而且可能更糟!