Как получить только повторные записи в таблице? - PullRequest
3 голосов
/ 18 августа 2011

Я не мог понять, как лучше задать этот вопрос, поэтому мои поиски стали отчаянными.

У меня есть таблица с тремя столбцами (Столбец1, Столбец2, Столбец3). В нем много записей, состоящих из разных и одинаковых значений. Я хочу получить только те же записи, что и значения column1, column2 и column3. Как я могу получить их в самом быстром запросе в общем SQL? И особенно HSQLDB?

Кроме того, если в моей таблице 4 столбца (+ Column4), но все же мне нужны такие же записи значений column1, column2 и column3. Запрос должен измениться или будет таким же?

Пример;

-------------------------------
| Column1 | Column2 | Column3 |
|    1    |    2    |   3     |  <-- A
|    2    |    2    |   30    |  <-- B
|    3    |    3    |   10    |
|    4    |    12   |   3     |  <-- C
|    1    |    3    |   3     |
|    1    |    4    |   3     |
|    1    |    5    |   3     |
|    4    |    12   |   3     |  <-- C
|    2    |    2    |   30    |  <-- B
|    1    |    2    |   3     |  <-- A
|    4    |    12   |   3     |  <-- C
-------------------------------

Поэтому мне нужно выбрать все A, B и C. записи. Результат должен быть;

-------------------------------
| Column1 | Column2 | Column3 |
|    1    |    2    |   3     |  <-- A
|    2    |    2    |   30    |  <-- B
|    4    |    12   |   3     |  <-- C
|    4    |    12   |   3     |  <-- C
|    2    |    2    |   30    |  <-- B
|    1    |    2    |   3     |  <-- A
|    4    |    12   |   3     |  <-- C
-------------------------------

-Результат опущен совершенно разные записи-

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Получите их, группируя в сочетании с предложением HAVING.Это также должно работать в HSQLDB.Предложение HAVING удаляет все данные из результата, в котором строки не содержатся кратно.Если у вас есть таблица с 4 столбцами, вы должны принять оператор.

SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1

РЕДАКТИРОВАТЬ: отредактировано, чтобы получить все строки

SELECT x.* FROM Table x INNER JOIN (
    SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1
) y ON x.Column1=y.Column1 AND x.Column2=y.Column2 AND x.Column3=y.Column3
1 голос
/ 18 августа 2011
SELECT Column1, Column2, Column3, count(*) from myTable
GROUP BY Column1, Column2, Column3

Вы можете опустить Count(*), если вам не важен счет. Это то, что вы хотите?

Было немного сложно понять, чего ты хочешь. Не могли бы вы привести пример желаемого результата?

...