2010-10-25 44 views
5

Đã tự hỏi nếu ai đó có thể giúp tôi ra một chút với truy vấn này:Cột không tồn tại?

SELECT u1.id,count(DISTINCT u2.userstatus) as TEMPCOLUMN FROM users AS u1 
JOIN friendssym ON u1.id = friendssym.user_id 
JOIN (SELECT * FROM users) as u2 ON friendssym.friend_id=u2.id 
WHERE TEMPCOLUMN=1 
group by u1.id; 

Tôi muốn chỉ có kết quả nơi count (được đổi tên) là bằng 1. Tôi nhận được một lỗi với truy vấn này:

ERROR: column "tempcolumn" does not exist 

Nhưng cột nên tồn tại, phải không? Bất cứ ai có thể hỗ trợ? Cảm ơn!

Trả lời

3

Bạn không thể tham chiếu bí danh cột trong mệnh đề WHERE.

SELECT u1.id, 
     COUNT(DISTINCT u2.userstatus) as TEMPCOLUMN 
    FROM USERS AS u1 
    JOIN friendssym ON u1.id = friendssym.user_id 
    JOIN USERS as u2 ON friendssym.friend_id = u2.id  
GROUP BY u1.id 
    HAVING COUNT(DISTINCT u2.userstatus) = 1 

Trong SQL truyền thống, sớm nhất bạn có thể tham chiếu bí danh cột là mệnh đề ORDER BY. Nhưng MySQL và SQL Server cho phép truy cập trong các mệnh đề HAVINGGROUP BY.

+0

Tôi đã sử dụng bí danh cột vì WHERE sẽ không cho phép tôi sử dụng COUNT trực tiếp (nó nói nó không thể sử dụng tập hợp) nhưng HAVING hoạt động hoàn hảo. Cảm ơn đã giúp đỡ! – Joseph

+0

@Airjoe: Đúng, không thể sử dụng hàm tổng hợp (COUNT, SUM, MIN hoặc MAX) trong mệnh đề WHERE bên ngoài truy vấn phụ - cần sử dụng mệnh đề HAVING cho điều đó. –

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