2017-06-07 1 views
0

Ich habe eine Abfrage, die mir alle Benutzer aus dem speziellen Bereich zurückgeben sollte. Wenn ich Bereiche hätte, wäre das Ergebnis immer noch gleichSQL: Wie man "und" und "oder" in einer "Where" -Klausel mit "NOT IN" -Bedingungen verwendet

SELECT users.id AS id, SUBSTRING(users.zipcode, 1, 2) 
FROM users JOIN country ON users.country_id = country.country_id 
WHERE country.country_code NOT IN ('AD','AF','BE') 
OR (country.country_code = 'FR' AND SUBSTRING(users.zipcode, 1, 2) 
NOT IN (69,38,26,07,42)) 

id | Benutzer_Zipcode | country_code

1 | 38 | FR

1 | 69 | BE

Ich möchte nicht alle Benutzer mit country_code 'AD', 'AF', 'BE' aber wenn country_code ist "FR" ich will nicht nur diejenigen mit den user_zipcode 69,38,26,07, 42

+1

können Sie Beispieldaten und die gewünschten Ergebnisse liefern? Das würde uns helfen zu verstehen, was Sie zu tun versuchen. –

+0

Ich denke "FR" muss in der 1. nicht enthalten sein. Da müssen besondere Zusatzbedingungen berücksichtigt werden. Es scheint, als ob Sie alle Benutzer nicht in den Ländern AD, AF, BE und FR möchten, vorausgesetzt, die Postleitzahl ist (69,38,26,07,42). wenn korrekt, dann muss FR in der 1. nicht in sein. Auch nicht in Betracht ziehen funktioniert nicht sehr gut mit NULL-Werten. Wenn – xQbert

+0

Länder: Andorra, Afghanistan und Belgien Französisch Abteilungen: Rhone, Isere, Drome, Ardeche und Loire. Bitte erläutern Sie, was Sie hier machen wollen. – Stavr00

Antwort

0

ausschließen Andora, Afghanistan, Belgien und einige Französisch Abteilungen:

WHERE country.country_code NOT IN ('AD','AF','BE') 
AND NOT (
    country.country_code = 'FR' AND 
    SUBSTRING(users.zipcode, 1, 2) IN (69,38,26,07,42) 
) 
Verwandte Themen