2010-08-27 4 views
10

Ich möchte eine SELECT-Abfrage mit MySQL durchführen. Mein Ziel ist es, alle Hunde in einer Tierarztdatenbank auszuwählen, die Geschlecht = männlich und Fell = kurz und (Farbe = schwarz oder Größe = groß) sindSQL SELECT-Anweisung mit WHERE, UND ODER

Hinweis: Ich möchte Hunde auswählen, die entweder schwarz oder Größe sind groß. Sie müssen die 2 Anforderungen nicht erfüllen. Sie müssen nur eines erfüllen.

Ich habe die SQL-Anweisung unten geschrieben, aber ich bin nicht nicht sicher, ob ich richtig:

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

Pardon meiner Phrasierung, wenn es zu verwirrend ist.

Antwort

23

Nach Operator precedence for MySQLAND hat eine höhere Priorität als OR.

So C1 AND C2 OR C3 als (C1 AND C2) OR C3

behandelt werden, um die Standard-Priorität Sie Klammern verwenden müssen, außer Kraft setzen: C1 AND (C2 OR C3)

In Ihrem Fall die richtige Frage ist:

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

Thnaks codaddict. Sollte es ein "UND" zwischen "WHERE TRUE" und "sex = 'name'" geben? – dave

+0

Sie haben Recht, Sie können 'WAHR UND C1 ...' oder nur 'C1 ....' – codaddict

1

Die Art, wie Sie in der Beschreibung Ihres Ziels Klammern verwenden, ist korrekt. Die Syntax ist:

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

Cheers Cherouvim. Hab einen guten. – dave

3

Stellen Sie sicher, um Klammern hinzuzufügen, damit die OR-Bedingung korrekt ausgewertet wird.

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

Cheers Lance haben. Hab einen guten. – dave

0

Ich habe dieses und seine Arbeit verwendet;

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