簡體   English   中英

從2個條件不相等(<>)的表中選擇笛卡爾積; PostgreSQL的

[英]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;

假設對field1field3進行了索引,並且DB對完全笛卡爾連接進行了一些優化,這可能會更快,可能會以完全相同的方式運行(使用EXPLAIN ),並且可能會更糟!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM