2012-11-09 16 views
5

Hãy nói rằng tôi có truy vấn như thế này:MySQL GROUP BY "và bộ lọc"

SELECT name, GROUP_CONCAT(number) 
FROM objects 
GROUP BY name 

Và nó ra:

+----------+----------------------+ 
| NAME | GROUP_CONCAT(NUMBER) | 
+----------+----------------------+ 
| false_1 | 2,1     | 
| false_2 | 3,4     | 
| true_1 | 4,3,2,1    | 
| true_2 | 2,3     | 
+----------+----------------------+ 

Bây giờ làm thế nào tôi có thể trả lại hàng có 2 AND 3 như number?

Lưu ý: Truy vấn này được nhóm - Bàn có 10 dòng, như vậy:

+---------+--------+ 
| NAME | NUMBER | 
+---------+--------+ 
| true_1 | 1  | 
| true_1 | 2  | 
| true_1 | 3  | 
| ...  | ... | 
+---------+--------+ 

[Link to SQLFiddle]

Trả lời

9
SELECT name, GROUP_CONCAT(number) 
FROM objects 
WHERE number IN (2,3) 
GROUP BY name 
HAVING COUNT(*) = 2 

hoặc nếu bạn muốn giữ lại tất cả giá trị trên w hich tên có,

SELECT a.name, GROUP_CONCAT(A.number) 
FROM objects a 
     INNER JOIN 
     (
      SELECT name 
      FROM objects 
      WHERE number IN (2,3) 
      GROUP BY name 
      HAVING COUNT(*) = 2 
     ) b ON a.Name = b.Name 
GROUP BY a.name 
+1

Đầu tiên hoạt động giống như một nét duyên dáng! Cảm ơn! – Kristian

+1

bạn được chào đón @Kristian! : D –

+0

Tại sao hàng 'true_1 | 4,3,2,1 'không được trả về dưới dạng của nó. –