2012-12-12 45 views
6

Tôi có hồ sơ như sau:Làm thế nào để chọn giá trị khác biệt với một cột duy nhất

key | name 
-------------- 
1111 | aa 
1111 | bb  
2222 | cc 

tôi cần phải chọn keyname khi giá trị key là khác biệt. Khi tôi cố gắng:

select distinct key, name from table; 

tôi có tất cả các hàng từ các truy vấn có khác biệt cho sự kết hợp của các cột: keyname. Nhưng, những gì tôi cần chỉ khác biệt key và tôi không quan tâm đến số name. Tôi có rất nhiều hồ sơ, vì vậy tôi cần một phương pháp thực tế.

Trả lời

10

Query:

SELECT `key`, MAX(`name`) as name 
FROM `table` 
GROUP BY `key` 
0
SELECT key, name FROM table GROUP BY key; 

này trả về một hàng cho mỗi giá trị riêng biệt của key, và giá trị của name được tùy tiện được lựa chọn từ các hàng trong nhóm đó. Trong thực tế, MySQL có xu hướng trả về giá trị của tên từ hàng vật lý được lưu trữ đầu tiên trong nhóm, nhưng điều đó không được bảo đảm.

Khi các câu trả lời khác hiển thị, bạn có thể đặt tên vào biểu thức tổng hợp.

0

Nếu bạn không quan tâm đến các lĩnh vực không được nhóm thử truy vấn này -

select key, name from table group by key order by name 

MySQL cho phép lựa chọn các lĩnh vực mà không sử dụng chức năng tổng hợp.

đặt hàng theo tên giúp chọn tên đầu tiên từ nhóm.

+0

Tôi tin rằng đây là SQL hợp lệ, altough MySQL chấp nhận nó và trả về một cái gì đó. Ngoài ra điều này "cái gì" là một tên ngẫu nhiên từ tập hợp các tên có cùng một khóa, do đó kết quả là không xác định (tùy thuộc vào xóa bảng và chèn). Điều này không có ý nghĩa và khuyến khích sự hiểu lầm giữa những người chưa nắm bắt được khái niệm tổng hợp. – colemar

+0

Tôi không thể nói nó không hợp lệ. MySQL cho phép nó, và chúng ta có thể sử dụng nó. Tôi đồng ý về hồ sơ ngẫu nhiên; nên có hàm tổng hợp hoặc mệnh đề ORDER BY - sẽ giúp chọn giá trị chính xác. Tôi sẽ chỉnh sửa câu trả lời của mình. – amk

+0

Nó không hợp lệ đối với mỗi ANSI/ISO SQL, vì nó dẫn đến kết quả không rõ ràng. MySQL và SQLite là các triển khai RDBMS duy nhất cho phép biểu mẫu này, theo như tôi biết. Các sản phẩm RDBMS khác trả về lỗi. –

2

Tại sao không chỉ:

SELECT distinct key 
FROM table 

hoặc

SELECT key, name 
FROM table 
GROUP BY key 
0

Làm thế nào về điều này:

select * from table group by key having count(key) = 1 
Các vấn đề liên quan