SQL-所有列中的不同记录

时间:2018-10-03 14:02:24

标签: sql oracle plsql

我正在尝试创建一个查询,该查询将返回一个结果集,该结果集在所有行中的所有记录中都是唯一的。

我有一个查询,返回的结果如下(其中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获取结果集并进行迭代,这在这种情况下是无法做到的。

非常感谢!

2 个答案:

答案 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获得唯一的行,然后仅进行并集