表1:A,B,C列 表2:A,B,C列
表2是具有不同数据的表1的副本。假设所有列都是varchar
寻找可以获取的单个高效查询:
Oracle SQL&我们将非常感谢同一查询的HQL。
我正在摆弄Joins,Unions&减去但无法获得正确的组合。
答案 0 :(得分:1)
<强> SQL:强>
SELECT *
FROM Table1
UNION ALL
SELECT *
FROM Table2 T2
WHERE NOT EXISTS(
SELECT 'X' FROM Table1 T1
WHERE T1.A = T2.A
)
<强> HQL:强>
你必须执行两个不同的查询,丢弃由Table2导致的元素导致Java循环,因为在HQL中不存在UNION命令。
另外,您可以为Table1编写第一个查询,第二个查询必须有一个not in子句来丢弃Table1 A字段。
解决方案1:
查询1:
SELECT * FROM Table1
查询2: SELECT * FROM Table2
然后在Java代码中应用discard循环
解决方案2:
查询1:
SELECT * FROM Table1
查询2:
SELECT * FROM Table2 WHERE Table2.A not in (SELECT Table1.A from Table1)
答案 1 :(得分:1)
此查询将返回table1
中的所有行,以及table2
中table1
中不存在的所有行,前提是列a
是公共密钥。
select a,b,c
from table1
union
all
select a,b,c
from table2
where a not in(select a from table1);
根据table1和table2的相对大小以及预期的重叠,可能有不同的选项。