MySQL: выбор различных комбинаций по двум строкам, а не двойной подсчет - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть следующая таблица

  dc  rc
----------
  AE  GB
  DE  US
  CN  DE
  DE  TT
  US  DE
  GB  AE

Я хочу выбрать все уникальные комбинации DC, RC, но независимо от порядка.В частности, выбор MySQL должен возвращать

  dc  rc
----------
  AE  GB
  DE  US
  CN  DE
  DE  TT

, т. Е. Он не должен дважды считать AE - GB и DE - US.Я обнаружил некоторые похожие проблемы, например, когда база данных является одной из взаимосвязей, которые всегда отображаются дважды (например, на Фильтр SQL-запроса по уникальному набору значений столбцов, независимо от их порядка ).Однако здесь это НЕ так, поскольку нет никакой гарантии, что запись появляется дважды (в большинстве случаев это не так).

Очевидно,

SELECT DISTINCT dc, rc FROM table GROUP BY dc, rc

НЕ подойдет.

Я благодарен за любую помощь

Ответы [ 3 ]

4 голосов
/ 18 ноября 2011

Попробуйте:

(ИЗМЕНЕНО, чтобы включить дополнительные столбцы)

select dc, rc, min(other_column1), sum(other_column2) /*etc as required*/
from
(select dc, rc, other_column1, other_column2 from table where rc >= dc
 union all
 select rc, dc, other_column1, other_column2 from table where rc < dc) v
group by dc, rc
2 голосов
/ 19 ноября 2011

Вот альтернатива, которая должна дать тот же ответ, что и у Марка:

SELECT A.DC, A.RC
FROM tab A
LEFT JOIN tab B
 ON A.DC = B.RC
AND A.RC = B.DC
AND A.DC >= B.DC
WHERE B.RC IS NULL
0 голосов
/ 18 ноября 2011

sql server - это мое дело, поэтому вам, возможно, придется перевести, но это должно быть сделано

...