2010-03-23 36 views
7

Tôi có ba bảng loại, phim và RelCatMovLàm thế nào để hiển thị kết quả của hàng truy vấn phụ dưới dạng một cột trong MySQL?

Thể loại bàn

categoryid, categoryName 
1   thriller 
2   supsense 
3   romantic 
4   action 
5   sci-fi 

Phim-bảng

movieid, movieName 
1   Avataar 
2   Titanic 
3   NinjaAssassin 

RelCatMov-bảng

categoryid, MovieID 
1   1 
2   2 
3   2 
4   2 
5   2 

bây giờ tôi muốn hiển thị một bản ghi như

MovieName  Categories 
Titanic Suspense,Romantic,Sci-fi,action 

Làm thế nào để làm điều này.

Tôi viết một truy vấn

select MovieName,(select categoryname from category b,relcatmov c where b.categoryid=c.categoryid and c.movieid=a.movieid) as categories from movies a; 

Error: Subquery returns more than one row!!! 

Làm thế nào để hiển thị các kết quả của các hàng trong một cột?

Xin vui lòng trợ giúp !!!

+0

Tại sao yêu cầu cụ thể (khá lạ) để nhận giá trị được phân cách bằng dấu phẩy? Không phải là một cách tốt đẹp để đại diện cho một trong nhiều ánh xạ trong RDBMS. –

+0

có thể vì lý do tương tự tôi cần nó. Để tạo tối ưu hóa trong bộ nhớ đại diện cho các tìm kiếm đơn giản. Nhanh hơn và dễ dàng hơn nhiều khi thực hiện tìm kiếm văn bản bằng dấu phẩy được phân cách bằng cách sử dụng kết nối hoặc chuỗi khác trên cơ sở dữ liệu. –

Trả lời

10

Trong Oracle, nó được gọi là stragg. Trong MySQL nó là GROUP_CONCAT.

select MovieName,(select GROUP_CONCAT(categoryname) from category b,relcatmov c where b.categoryid=c.categoryid and c.movieid=a.movieid) as categories from movies a; 

Để tham khảo, vấn đề của bạn là MySQL muốn bạn trả về một giá trị duy nhất và bạn sẽ trả về một vài hàng thay thế.

+0

Cảm ơn bạn đã đề cập đến "stragg" trong câu trả lời của bạn ... câu hỏi này xuất hiện đầu tiên trong một tìm kiếm của Google cho "mysql stragg". – Paul

-2

Đối với một nhu cầu tương tự trong MS-SQL, tôi đã viết một hàm trả về cho tôi một danh sách nối (chuỗi). Vì vậy, bạn có thể làm theo cách tiếp cận này.

Các vấn đề liên quan