Cả hai điều này đều hợp lệ, nhưng vì AND
có mức độ ưu tiên cao hơn OR
, chúng có nghĩa là những thứ khác nhau:
- Truy vấn trong ngoặc đơn đầu tiên của bạn sẽ chọn các hàng đã xóa với các loại 3, 4, 5
- Truy vấn trong ngoặc đơn thứ hai của bạn sẽ chọn tất cả các hàng có loại 3, 5, ngoài các hàng đã xóa thuộc loại 4; ý nghĩa này giống như trong truy vấn ban đầu không có dấu ngoặc đơn.
Bạn hoàn toàn có thể tránh nhầm lẫn bằng cách sử dụng toán tử IN
, như thế này:
SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;
hoặc nếu bạn muốn ý nghĩa thứ hai
SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)