2012-01-05 36 views
6

Tôi có ba bảng - node, content_type_product và share_content. Ở đó, có thể là nút giữa 1: N giữa các nút giữa và share_content. Tôi muốn rút ra chỉ một bản ghi cho mỗi id. Nếu có nhiều bản ghi trong share_content, tôi muốn một mới nhất, đó là giá trị cao nhất của sc.auto_idsql left join + one to many relationship

SELECT sc.uid, n.uid, n.nid, sc.message 
    FROM node n 
    LEFT JOIN content_type_product p ON n.nid = p.nid 
    LEFT JOIN share_content sc ON n.nid = sc.nid 
    WHERE n.nid = 40513 
    GROUP BY sc.nid 
    ORDER BY sc.auto_id 
+0

Bạn có thể sử dụng ORDER BY sc.auto_id DESC – amccausl

+1

Các [ví dụ] (http://sscce.org/) là không đầy đủ mà không schema (là 'câu lệnh CREATE TABLE'), mẫu dữ liệu (như câu lệnh 'INSERT') và kết quả mong muốn cho dữ liệu mẫu. – outis

+0

có thể trùng lặp của [Chọn hàng có cột giá trị cột tối đa theo cột khác] (http://stackoverflow.com/questions/1425240/), [Cách tìm giá trị cột chuỗi trên cùng trong một truy vấn được nhóm] (http: // stackoverflow.com/questions/1443979/), [SQL Group by & Max] (http://stackoverflow.com/questions/1299556/) – outis

Trả lời

5

Tại sao các bạn tham gia để content_type_product ?? Nhưng điều đó sang một bên, cố gắng

SELECT c.uid, n.uid, n.nid, c.message 
FROM node n 
    LEFT JOIN share_content c 
     ON c.nid = n.nid 
      And c.auto_id 
      = (Select Max(auto_id) 
       From share_content 
       Where nid = p.nid) 
Where n.nid = 40513 
ORDER BY c.auto_id 
+0

Đã chỉnh sửa vì truy vấn phụ của bạn sẽ không trả lại các cột cần thiết để thực hiện việc nối, nó sẽ chỉ trả về giá trị MAX (auto_id). –

+0

hmm, cách c.auto_id = uid, tin nhắn ?? – sonofthom

+0

được chỉnh sửa lại để trả lại nội dung đã gửi - vì đó là cột duy nhất mà truy vấn phụ CẦN trả về, mã được thêm vào cho trường thông báo –

1

Hãy thử:

SELECT sc.uid, n.uid, n.nid, sc.message FROM node n left join content_type_product p on n.nid = p.nid LEFT JOIN share_content sc on n.nid = sc.nid 
WHERE n.nid = 40513 
GROUP BY sc.nid, sc.auto_id 
ORDER BY sc.auto_id DESC 
+0

Cảm ơn bạn - công trình, tuy nhiên - chúng tôi đang tìm cách chỉ nhóm bằng sc.nid - vì chúng tôi chỉ muốn có một kết quả. – sonofthom