2011-03-11 41 views
17

Tôi thực sự cần làm một cái gì đó như thế:GROUP BY trong CẬP NHẬT mệnh đề FROM

UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2; 

Nhưng postgres đang nói rằng tôi có lỗi cú pháp về mệnh đề GROUP BY. Một cách khác để làm điều này là gì?

+0

Tôi nghĩ bạn cần chứng minh rõ ràng hơn những gì bạn muốn: đề cập đến "t2.column1" khi bạn nhóm theo "t1.column2" sẽ không có ý nghĩa trong truy vấn đơn giản. Bạn cũng không chỉ định bất kỳ điều kiện nào tham gia t2 và t1, điều này thực sự không có ý nghĩa. – araqnid

+0

tôi không nghĩ rằng nó có thể được thực hiện với mysql ít nhất – shigeta

Trả lời

47

Câu lệnh UPDATE không hỗ trợ GROUP BY, xem the documentation. Nếu bạn đang cố gắng để cập nhật t1 với hàng tương ứng từ t2, bạn muốn sử dụng một cái gì đó mệnh đề WHERE như thế này:

UPDATE table t1 SET column1=t2.column1 
FROM table t2 
JOIN table t3 USING (column2) 
WHERE t1.column2=t2.column2; 

Nếu bạn cần vào nhóm hàng từ t2/t3 trước khi giao đến t1 , bạn sẽ cần phải sử dụng một cái gì đó subquery như thế này:

UPDATE table t1 SET column1=sq.column1 
FROM (
    SELECT t2.column1, column2 
    FROM table t2 
    JOIN table t3 USING (column2) 
    GROUP BY column2 
    ) AS sq 
WHERE t1.column2=sq.column2; 

Mặc dù là công thức đó sẽ không làm việc vì t2.column1 không được bao gồm trong GROUP BY statement (nó sẽ phải là một chức năng tổng hợp thay vì tham chiếu cột đơn giản).

Nếu không, bạn đang cố gắng làm gì ở đây?

+1

Tôi không hiểu những gì ông đã cố gắng để làm một trong hai nhưng phản ứng này vẫn còn khá hữu ích cho tôi =) – Yobert

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