2012-04-20 4 views
1

У меня есть запрос в MySQLОтдельное значение в два столбца

select f1,f2,f3 from tableName; 

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

Я устал следующим

select f1,f2,f3 from tableName 
group by f1,f2; 

Но он удалит дубликаты только в f1. Все тело может предложить мне, как удалить дубликаты в f1 и f2.

topic_id topic_name     question_type 
2237 Understanding Diversity   Comprehensive 
2237 Understanding Diversity   Easy 
2237 Understanding Diversity   Application 
44315 Bhasha, boli, lipi, or Vayakaran Intermediate 

выше пример вывод, имеющий определенное значение в столбце question_type только здесь я хочу, чтобы удалить дубликаты из question_type и topic_id

ожидается выход: имеющий как topic_id и question_type различных значений

44315 Bhasha, boli, lipi, or Vayakaran Intermediate 
2237 Understanding Diversity   Comprehensive 
+0

Подари выборки данных и ожидаемого результата. На данный момент ваш вопрос не совсем ясен – zerkms

+0

И каков же желаемый результат? – zerkms

ответ

0

Мой SQL действительно не так уж и хорош, но я думаю, вам нужно сделать то, что называется вложенной операцией SELECT.

Вот эта справочная информация.

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Это сделало бы SQL выглядеть примерно так.

SELECT f1,f2,f3 FROM (SELECT f1,f2,f3 FROM tableName AS table1 GROUP BY f1) AS table2 GROUP BY f2; 

Обратите внимание, что я должен использовать, чтобы создать псевдоним, иначе «TABLENAME» будет конфликтовать с родительским SQL выберите.

+1

«Мой SQL действительно не так уж хорош» - на самом деле это здорово. Любая «зрелая» СУБД даже не запускает ваш * неверный * запрос. Так что это здорово, по крайней мере, потому, что позволяет запускать запросы, которые не имеют смысла. – zerkms

+0

В SQL SQL не обнаружены синтаксические ошибки. Поэтому, пожалуйста, объясните, что такое «неправильная» часть, а не просто голосует за ответ, основанный на этом запросе, который отлично работает в MySQL Workbench. SELECT * FROM (SELECT * FROM receipts AS table1 GROUP BY smart_category_id) AS table2 GROUP BY smart_vendor_id; – cgTag

+0

1) Я не спустил 2) все «зрелые» СУБД не позволяли вам выбирать что-либо, что не используется в «GROUP BY» или не используется в функциях агрегации (это ожидаемое поведение, описанное в ANSI SQL). В вашем случае - когда вы 'group by f1' - какие' f2' и 'f2' должны быть возвращены? Mysql позволяет это делать, но он все равно не имеет смысла. – zerkms

2

Вы были почти там - вам также нужно сгруппировать последний столбец. Я могу только догадываться использование, поэтому я добавил отсортированный резюме покрываемых question_type с, что может быть удобно для поиска или выхода:

SELECT 
    topic_id, 
    topic_name, 
    GROUP_CONCAT(DISTINCT question_type ORDER BY question_type) AS question_types 
FROM tableName 
GROUP BY topic_id, topic_name; 

результат:

'2237', 'Understanding Diversity', 'Application,Comprehensive,Easy' 
'44315', 'Bhasha, boli, lipi, or Vayakaran', 'Itermediate' 
+0

Я пробовал это не будет работать – Sheo

+0

Этот запрос выполнялся точно так же, как он находится на консоли MySQL. У вас может быть другая проблема - можете ли вы отправить сообщение об ошибке? –

Смежные вопросы