表1:列A,B,C表2 :列A,B,C最快SQL&HQL查詢爲兩個表
表2是表1中的不同的數據的副本。假定所有列是VARCHAR
尋找其可以取單個高效的查詢:
- 列A,B,C從表1表2從
- 附加行,其中Table2.A的值不存在在表1.A
對於相同的查詢,Oracle SQL & HQL之間的任何差異將不勝感激。
我亂搞連接,聯合&負,但沒能得到正確的組合。
表1:列A,B,C表2 :列A,B,C最快SQL&HQL查詢爲兩個表
表2是表1中的不同的數據的副本。假定所有列是VARCHAR
尋找其可以取單個高效的查詢:
對於相同的查詢,Oracle SQL & HQL之間的任何差異將不勝感激。
我亂搞連接,聯合&負,但沒能得到正確的組合。
SQL:
SELECT *
FROM Table1
UNION ALL
SELECT *
FROM Table2 T2
WHERE NOT EXISTS(
SELECT 'X' FROM Table1 T1
WHERE T1.A = T2.A
)
HQL:
必須執行兩個不同的查詢中丟棄由表2的結果元素在Java循環,因爲在HQL不存在UNION命令。
Alternatatively你可以寫爲表1的第一個查詢和第二查詢必須有一個不能條款丟棄表1的字段。
解決方案1:
查詢1:
SELECT * FROM Table1
查詢2: SELECT * FROM表2
,然後應用在Java代碼中丟棄循環
解決方案2:
查詢1:
SELECT * FROM Table1
查詢2:
SELECT * FROM Table2 WHERE Table2.A not in (SELECT Table1.A from Table1)
該查詢返回table1
所有行,加上考慮到列a
在table2
所有行不以table1
存在,是公共密鑰。
select a,b,c
from table1
union
all
select a,b,c
from table2
where a not in(select a from table1);
根據table1和table2的相對大小和預期的重疊情況,可能有不同的選項可用。
謝謝@Ronnis。查詢很棒。 但選擇了Joe Taras的答案,因爲這是一個可行的HQL解決方案。 –
嘗試相交,減,除 – Zeus