Tôi đang cố gắng để có được một số truy vấn được viết cho một số tính toàn vẹn trên hai bảng. Truy vấn là một cái gì đó như thế nàyLàm cách nào để sử dụng WHERE trên cột được tính toán?
SELECT if(o.is_discounted !=1, o.item_cost, o.discounted_item_cost) AS order_item_total,
SUM(oi.quantity * oi.price) AS item_total
FROM orders o
INNER JOIN order_items oi ON oi.order_id = o.id
WHERE order_item_total != item_total
GROUP BY o.id
Tôi đã chắc chắn sử dụng bí danh để cột như vậy trong quá khứ vì vậy tôi không chắc chắn lý do tại sao trong trường hợp này nó nói với tôi order_item_total
không phải là một cột.
bản sao của http://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error [từ tài liệu mySQL] (http : //dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html): SQL tiêu chuẩn không cho phép tham chiếu đến các bí danh cột trong mệnh đề WHERE. Hạn chế này được áp dụng vì khi mệnh đề WHERE được đánh giá, giá trị cột có thể chưa được xác định. – xQbert
Thử thay thế 'WHERE' bằng' HAVING', điều đó sẽ khắc phục được. – halfer
@xQbert Bạn đúng, nhưng câu trả lời này không tốt bằng câu hỏi ở đây, theo như truy vấn cụ thể này. Thật buồn cười Tôi chưa bao giờ thử điều này trước đây - tôi nghĩ là có. Nhưng dường như nó chỉ ở trong mệnh đề ORDER BY và HAVING –