2016-01-19 3 views
5

У меня есть таблица mytable, как показано ниже;Запрос MySQL возвращает повторяющиеся строки

╔═════════╦══════╦═════╗ 
║ product ║ tag ║ lot ║ 
╠═════════╬══════╬═════╣ 
║ 1111 ║ 101 ║ 2 ║ 
║ 1111 ║ 102 ║ 5 ║ 
║ 2222 ║ 103 ║ 6 ║ 
║ 3333 ║ 104 ║ 2 ║ 
║ 4444 ║ 101 ║ 2 ║ 
║ 5555 ║ 101 ║ 2 ║ 
║ 5555 ║ 102 ║ 5 ║ 
║ 6666 ║ 102 ║ 2 ║ 
║ 6666 ║ 103 ║ 5 ║ 
║ 7777 ║ 101 ║ 2 ║ 
║ 7777 ║ 102 ║ 5 ║ 
║ 7777 ║ 103 ║ 6 ║ 
║ 8888 ║ 101 ║ 1 ║ 
║ 8888 ║ 102 ║ 3 ║ 
║ 8888 ║ 103 ║ 5 ║ 
║ 9999 ║ 101 ║ 6 ║ 
║ 9999 ║ 102 ║ 8 ║ 
╚═════════╩══════╩═════╝ 

У меня есть вход 101, 102. Я хочу, чтобы выход понравился;

2,5 
6,8 

У меня есть запрос типа;

select group_concat(lot order by lot) 
from `mytable` 
group by product 
having group_concat(tag order by tag) = '101,102'; 

Возврат;

2,5 
2,5 
6,8 

Вместо двух 2,5, я хочу только один, избегая повторяющиеся строки. Как я могу это сделать?

Вот скрипка http://sqlfiddle.com/#!9/7a78bb/1/0

+5

попробовать 'выбрать отличный GROUP_CONCAT (много заказов по жребию) ' –

+0

TIL, что SQLFiddle - это вещь. Потрясающие. – Draco18s

+0

Возможный дубликат [Запрос MySQL возвращает нежелательные строки при извлечении строк на основе определенных комбинаций тегов] (http://stackoverflow.com/questions/34885425/mysql-query-returns-unwanted-rows-on-fetching-rows-based- on-specific-tag-combina) – CodeGodie

ответ

6

Если вы хотите distinct то

select distinct group_concat(lot order by lot) 
from `mytable` 
group by product 
having group_concat(tag order by tag) = '101,102'; 
0

Вам нужно просто использовать DISTINCT для устранения дубликатов

select DISTINCT group_concat(lot order by lot) 
from `mytable` 
group by product 
having group_concat(tag order by tag) = '101,102'; 
Смежные вопросы