Как найти строки с одинаковым индексом комбинации? - PullRequest
1 голос
/ 07 мая 2011

У меня есть индекс комбинации из 3 столбцов. Я хочу найти строки, которые имеют одинаковое значение для этого индекса. Это мой индекс:

CREATE INDEX foobar ON tablename (foo, bar, asdf);

Индекс не уникален. Я создал его с идеей, что он поможет мне найти строки с одинаковыми значениями в этих 3 столбцах (foo, bar, asdf)

В качестве альтернативы, я мог бы создать новый столбец, значение которого является комбинацией трех других значений столбца. Но разве это мой единственный выбор?

Могу ли я использовать этот индекс для того, что я хочу?

Ответы [ 2 ]

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

Индекс не используется для группировки данных, но размещать их в таблице.

Если вы хотите найти элементы с общими значениями, лучше выполнить запрос, например

  SELECT foo, bar, asdf, SUM(1) as counter 
    FROM mytable 
GROUP BY foo, bar, asdf 

Это покажет вам элементы с кратными, вы можете сделать более длинный запрос, чтобы экстраполировать элементы со счетчиком> 1, а затем получить значения для него:

  SELECT t.foo, t.bar, t.asdf, SUM(1) as counter 
    FROM mytable AS t
GROUP BY t.foo, t.bar, t.asdf 
  HAVING counter > 1;
0 голосов
/ 07 мая 2011

Ваш индекс ускорит запросы, где вы хотите, чтобы все строки с определенными значениями для этих трех столбцов, такие как:

SELECT * FROM tablename WHERE foo = 1 AND bar = 2 AND asdf = 3

Я не уверен, но это также может помочь с запросами, которые сортируютрезультаты таковы, что совпадающие строки смежны, например:

SELECT * FROM tablename WHERE somecondition ORDER BY foo, bar, asdf;

Исходя из вашего комментария, похоже, что вы хотите что-то вроде этого:

SELECT GROUP_CONCAT(id SEPARATOR ',') as ids, foo, bar, asdf, COUNT(*) as cnt FROM tablename GROUP BY foo, bar, asdf HAVING cnt > 1;

Это скажет вам, какие строкиявляются дубликатами, и вы можете перейти оттуда, чтобы проверить все, что вам нужно для отдельных наборов.Если вы хотите сделать все с помощью одного запроса, вы можете использовать более тяжелый SQL для этого, но это будет не просто.

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