SQL - отдельные записи по всем столбцам - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать запрос, который будет возвращать набор результатов, который уникален для всех записей во всех строках.

У меня есть запрос, который возвращает такие результаты, как (где 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 голосов
/ 03 октября 2018

простой способ сделать то, что вам нужно, это использовать union и оператор minus

UNION объединить результат 2 запросов MINUS аналогичен union, но возвращает толькоуникальные строки, возвращаемые первым запросом, но не вторым:

вам нужно только объединить обе одновременно

( 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
)

, первый подзапрос получает уникальные строки из таблицы1 и второгоподзапрос получает уникальные строки из таблицы 2, тогда вы создаете только объединение

0 голосов
/ 03 октября 2018

Если вы хотите, чтобы значения из 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
)

(обратите внимание, что ваш запрос появляется дважды в приведенном выше, и этот запрос можетСамо по себе, я упустил это для ясности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...