ОТЛИЧНАЯ проблема - PullRequest
       2

ОТЛИЧНАЯ проблема

4 голосов
/ 30 мая 2011

У меня есть таблица с несколькими столбцами, и я хочу найти только те, в которых комбинация A и B различна.

Может быть несколько таких строк, и я хочу получить каждое поле строки для каждогоОтличная комбинация A и B (скажем, есть также столбцы C и D).


Уточнение:

Я хочу сказать что-то вроде

for each distinct A/B combination
   get C and D

Ответы [ 3 ]

6 голосов
/ 30 мая 2011

Использование EXISTS:

SELECT a.c, a.d
  FROM YOUR_TABLE a
 WHERE EXISTS (SELECT NULL
                 FROM YOUR_TABLE b
                WHERE b.a = a.a
                  AND b.b = a.b
             GROUP BY b.a, b.b
               HAVING COUNT(*) > 1)

Использование JOIN:

SELECT a.c, a.d
  FROM YOUR_TABLE a
  JOIN (SELECT b.a, b.b
          FROM YOUR_TABLE b
      GROUP BY b.a, b.b
        HAVING COUNT(*) > 1) x ON x.a = a.a
                              AND x.b = a.b

Вероятно, EXISTS предпочтительнее, если вы не собираетесь возвращать столбцы из производной таблицы в предложении SELECT.

2 голосов
/ 30 мая 2011

Похоже, что это должно быть решено с использованием GROUP BY, но также может быть UNION, как указано в этом вопросе:

Выберите отличные от нескольких полей, используя sql

1 голос
/ 30 мая 2011

Вы не отвечаете на вопрос, какую строку показывать, если у вас есть две строки с одинаковыми значениями для A и B. Например:

A   B   C   D
=============
0   1   5   5
0   1   4   7
0   0   1   1

Если вам нужны только уникальные экземпляры A и B, следует ли возвращать C = 5, D = 5 или C = 4, D = 7? Если вы можете решить, как возвращать значения, используя агрегатную функцию, то вы можете использовать предложение GROUP BY A, B и агрегатные методы для столбцов C и D.

Например, следующее вернет самые большие значения C и D:

SELECT    A, B, MAX(C), MAX(D)
FROM      myTable
GROUP BY  A, B

Полный список агрегатных функций можно найти на этом веб-сайте: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

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