2010-05-10 31 views
6

Tôi đang cố viết một truy vấn trả về cùng một kết quả từ ba sự kiện khác nhau, nhưng tôi nghĩ mình đang làm sai. Tôi có thể chạy truy vấn của mình dựa trên một ID sự kiện và nó hoạt động. Làm thế nào tôi có thể chọn cả ba? Dưới đây là những gì tôi có cho đến nay:MySQL: Câu hỏi về CHỌN Ở ĐÂU VÀ/HOẶC

SELECT * FROM `Registrations` 
WHERE `Role` = "Attendee" AND `RegistrationStatus_ID` = "1" AND `DigSignature` IS NULL 
    AND `Event_ID` = "147" OR `Event_ID` = "155" OR `Event_ID` = "160" 

Trả lời

25
SELECT * 
FROM `Registrations` 
WHERE `Role` = "Attendee" 
    AND `RegistrationStatus_ID` = "1" 
    AND `DigSignature` IS NULL 
    AND `Event_ID` in ("147", "155", "160") 
+4

Tôi đoán bạn giành được giải thưởng "bài đăng nhanh" trong lần này. –

+0

hoàn hảo. cảm ơn bạn. – Andrew

+1

màn hình truy vấn rất đẹp! – lean

0

Bạn cần phải quấn HOẶC báo cáo trong ngoặc đơn:

SELECT * FROM `Registrations` 
WHERE `Role` = "Attendee" AND `RegistrationStatus_ID` = "1" AND `DigSignature` IS NULL 
    AND (`Event_ID` = "147" OR `Event_ID` = "155" OR `Event_ID` = "160") 
2
SELECT * FROM `Registrations` 
WHERE `Role` = "Attendee" AND `RegistrationStatus_ID` = "1" AND `DigSignature` IS NULL 
    AND (`Event_ID` = "147" OR `Event_ID` = "155" OR `Event_ID` = "160") 

Khi bạn trộn AND và OR, nó rất hữu ích để sử dụng dấu ngoặc để nhóm mọi thứ lại với nhau. Ngay cả khi nó không cần thiết cho logic, đôi khi nó rất hữu ích cho những người khác hiểu ý định của bạn.

1

ANDOR có quyền ưu tiên bằng nhau.

SELECT * FROM `Registrations` 
WHERE `Role` = "Attendee" AND `RegistrationStatus_ID` = "1" AND `DigSignature` IS NULL 
    AND (`Event_ID` = "147" OR `Event_ID` = "155" OR `Event_ID` = "160")