表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