2010-08-27 32 views
10

Tôi muốn thực hiện truy vấn SELECT với MySQL. Mục tiêu của tôi là chọn tất cả chó trong cơ sở dữ liệu thú y có thể là giới tính = nam và lông = ngắn và (màu = đen hoặc cỡ = lớn)Lệnh chọn SQL với WHERE, AND, HOẶC

Lưu ý: Tôi muốn chọn những con chó có màu đen hoặc cỡ to. Họ không phải hoàn thành 2 yêu cầu. Họ chỉ cần thực hiện một trong hai.

Tôi đã viết các câu lệnh SQL dưới đây nhưng tôi không không chắc chắn nếu tôi là đúng:

SELECT name, sex, fur, color FROM dogs WHERE TRUE sex='male' AND fur='short' AND color='black' OR size="big"; 

Pardon phân nhịp của tôi nếu nó quá khó hiểu.

Trả lời

23

Theo Operator precedence for MySQLAND có độ ưu tiên cao hơn OR.

Vì vậy C1 AND C2 OR C3 sẽ được coi như (C1 AND C2) OR C3

Để ghi đè các ưu tiên mặc định, bạn cần phải sử dụng dấu ngoặc đơn như: C1 AND (C2 OR C3)

Trong trường hợp của bạn truy vấn đúng là:

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size="big"); 
+0

Thnaks codaddict. Nên có 'AND' giữa 'WHERE TRUE' và "sex = 'name'"? – dave

+0

Bạn đúng, bạn có thể có 'TRUE AND C1 ...' hoặc chỉ 'C1 ....' – codaddict

1

Cách bạn sử dụng dấu ngoặc đơn trong mô tả mục tiêu của bạn là chính xác. Cú pháp là:

SELECT name, sex, fur, color 
    FROM dogs 
    WHERE sex="male" AND fur="short" AND (color="black" OR size="big"); 
+0

Chúc mừng cherouvim. Có một cái tốt. – dave

3

Hãy chắc chắn rằng để thêm dấu ngoặc đơn, vì vậy điều kiện OR được đánh giá đúng.

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size='big'); 
+0

Chúc mừng Lance. Có một cái tốt. – dave

0

Tôi đã sử dụng tính năng này và hoạt động của nó;

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex="male" AND fur="short" AND (color="black" || size="big"); 
Các vấn đề liên quan