[英]select cartesian product from 2 tables with not equal (<>) where condition; postgresql
我需要兩個表MINUS組合的笛卡爾積,其中兩個表在一個字段中具有相同的值。
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
進行了索引,並且DB對完全笛卡爾連接進行了一些優化,這可能會更快,可能會以完全相同的方式運行(使用EXPLAIN
),並且可能會更糟!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.