2010-05-10 14 views
6

Sto provando a scrivere una query che restituisce lo stesso risultato da tre diversi eventi, ma penso di sbagliarmi. Posso eseguire la mia query su un ID evento e funziona. Come posso selezionare tutti e tre? Ecco quello che ho finora:MySQL: Domanda su SELECT WHERE AND/OR

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" 

risposta

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

Immagino tu abbia vinto il premio "post rapido" questa volta. –

+0

perfetto. grazie. – Andrew

+1

la visualizzazione delle query è piacevole! – lean

0

È necessario avvolgere OR tra parentesi:

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") 

quando si sta mescolando AND e OR, è utile usare parentesi raggruppare le cose. Anche quando non è necessario per la logica, a volte è utile che gli altri capiscano le tue intenzioni.

1

AND e OR hanno uguale precedenza.

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")