Ich bin neu in der Programmierung und das ist meine erste Frage, also entschuldige ich mich, wenn ich einen Fehler mache.Wie man UND/ODER effektiv in SQL Server
ich diese Abfrage geschrieben haben:
SELECT U.Id, UWH.Role, USI.Title, CAST(USI.StartDate AS DATE)
FROM UserWorkHistory UWH
JOIN Users U ON UWH.UserId=U.Id
JOIN UserStoryItems USI ON U.Id=USI.UserId
JOIN UserWorkHistoryTypes UWHT ON UWH.UserWorkHistoryTypeId=UWHT.Id
WHERE U.Location LIKE '%Great Britain%'
OR U.Location LIKE '%United Kingdom%'
OR U.Location LIKE '%England%'
OR U.Location LIKE '%UK%'
OR U.Location LIKE '%U.K.%'
AND UWHT.Id = 1
AND USI.Id = 1
AND CAST(USI.StartDate AS DATE) > DATEADD(YEAR,-5,GETDATE())
AND UWH.Role LIKE '%Contract%'
OR UWH.Role LIKE '%Contractor%'
OR UWH.Role LIKE '%Freelance%'
OR UWH.Role LIKE '%Non-perm%'
OR UWH.Role LIKE '%non-permanent%'
OR USI.Title LIKE '%Contractor%'
OR USI.Title LIKE '%Contractor%'
OR USI.Title LIKE '%Freelance%'
OR USI.Title LIKE '%Non-perm%'
OR USI.Title LIKE '%non-permanent%'
OR USI.Title LIKE '%self-made%'
Ich versuche, vier Dinge zu spezifizieren:
1) Dass die Ergebnisse, die ich wieder aus dem Vereinigten Königreich sind erhalten
2), dass die Ergebnisse Ich bekomme zurück einige der Wörter, die ich in den "LIKE" -Argumenten angegeben habe.
3) Dass die Ergebnisse den Regeln entsprechen (UWHT.Id = 1, USI.Id = 1).
4) Dass mir nur die Ergebnisse mit einem StartDate der letzten 5 Jahre zurückgegeben werden.
Abgesehen von den Standorten, kommt nichts anderes zurück, als ich möchte. Ich könnte mir vorstellen, dass es wegen einer falschen AND/OR-Syntax ist, aber ich kann keine vorherige SO-Frage finden, die erklärt, wie man das macht (wenn es eine gibt und ich habe es verpasst, entschuldige ich mich).
Mögliche Duplikat [SQL Logic Operator Präzedenz: Und und Oder] (http://stackoverflow.com/questions/1241142/sql-logic-operator-precedence-and -und-oder) –
Ihre Anfrage benötigt Klammern, viele davon! – jarlh
Denken Sie auch daran, die Positionsstrings, Rollen und Titel in ihren eigenen Tabellen mit einem JOIN zu verknüpfen. Auf diese Weise ist die Abfrage einfacher und es ist einfach, Dinge hinzuzufügen/zu entfernen, ohne die Abfrage selbst ändern zu müssen. –