我正在尝试创建一个查询,该查询将返回一个结果集,该结果集在所有行中的所有记录中都是唯一的。
我有一个查询,返回的结果如下(其中a和b是不同的表名,每个都有一个名为“ ex”的列):
| a.ex | b.ex |
|a |1 |
|a |2 |
|a |3 |
|b |2 |
|c |1 |
|c |2 |
我要检索的是一个结果集,其中仅返回两列的DISTINCT结果,例如
| a.ex | b.ex |
|a |3 |
|b |2 |
|c |1 |
在这些结果中,a.ex在行中没有重复,b.ex在行中没有重复。
坚持如何处理这个问题!理想情况下,它必须是SQL和/或PLSQL,但是我通常会使用Java获取结果集并进行迭代,这在这种情况下是无法做到的。
非常感谢!
答案 0 :(得分:0)
如果您希望a.ex中的值与b.ex中的唯一值相关联,那么大多数解决方案都取决于您未向我们显示的查询的内容! >
如果我假设您的查询看起来像这样:
SELECT a.ex, b.ex
FROM table1 a, table2 b
WHERE a.id=b.id
然后...
SELECT c.ex, d.ex
FROM table1 c,
table2 d
WHERE c.id=d.id
AND d.ex IN (
SELECT b_ex as unique_bex
FROM (
SELECT a.ex as a_ex, b.ex AS b_ex
FROM table1 a, table2 b
WHERE a.id=b.id
) ilv
GROUP BY a_ex
HAVING COUNT(*)=1
)
(请注意,您的查询在上面出现了两次,该查询本身也可以简化-为清楚起见,我将其跳过了。)
答案 1 :(得分:0)
一种简单的方法来执行所需的操作是使用 union 和运算符减
UNION结合2个查询的结果 MINUS类似于并集,但仅返回第一个查询返回的唯一行,而不返回第二个查询:
您只需要同时合并
( select a.ex,b.ex from table1
minus
select a.ex,b.ex from table2
)
UNION
( select a.ex,b.ex from table2
minus
select a.ex,b.ex from table1
)
第一个子查询从table1获得唯一的行,第二个子查询从table2获得唯一的行,然后仅进行并集