最快的SQL&两个表的HQL查询

时间:2014-03-07 14:39:47

标签: sql oracle hibernate hql

表1:A,B,C列 表2:A,B,C列

表2是具有不同数据的表1的副本。假设所有列都是varchar

寻找可以获取的单个高效查询:

  • 表1中的A,B,C列
  • 表2中的附加行,其中Table2.A的值不存在于表1.A

Oracle SQL&我们将非常感谢同一查询的HQL。

我正在摆弄Joins,Unions&减去但无法获得正确的组合。

2 个答案:

答案 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中的所有行,以及table2table1中不存在的所有行,前提是列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的相对大小以及预期的重叠,可能有不同的选项。