2016-01-19 14 views
5

Tôi có một bảng mytable như dưới đây;Truy vấn MySQL trả về các hàng trùng lặp

╔═════════╦══════╦═════╗ 
║ 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 ║ 
╚═════════╩══════╩═════╝ 

Tôi có đầu vào 101, 102. Tôi muốn đầu ra như;

2,5 
6,8 

Tôi có truy vấn như;

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

Nó trả về;

2,5 
2,5 
6,8 

Thay vì hai 2,5, tôi chỉ muốn một, tránh các hàng trùng lặp. Tôi có thể làm cái này như thế nào?

Đây là fiddle http://sqlfiddle.com/#!9/7a78bb/1/0

+5

thử 'chọn group_concat biệt (thứ tự rất nhiều bởi rất nhiều) ' –

+0

TIL rằng SQLFiddle là Thing. Tuyệt vời. – Draco18s

+0

Có thể trùng lặp của [Truy vấn MySQL trả về các hàng không mong muốn khi tìm nạp các hàng dựa trên các kết hợp thẻ cụ thể] (http://stackoverflow.com/questions/34885425/mysql-query-returns-unwanted-rows-on-fetching-rows-based- on-specific-tag-combina) – CodeGodie

Trả lời

6

Nếu bạn muốn distinct sau đó

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

Bạn cần phải chỉ cần sử dụng DISTINCT để loại bỏ Duplicates

select DISTINCT group_concat(lot order by lot) 
from `mytable` 
group by product 
having group_concat(tag order by tag) = '101,102'; 
Các vấn đề liên quan