私はプログラミングの初心者です。これは私の最初の質問です。間違えた場合はお詫び申し上げます。SQL ServerでAND/ORを効果的に使用する方法
私はこのクエリ書かれている:
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%'
私は4つの物事を指定しようとしています:私は戻って取得結果は、英国
2)の結果それからのものであること
1)私は 'LIKE'引数で指定した単語のどれかを返します。
3)結果がルールに従うこと(UWHT.Id = 1、USI.Id = 1)。
4)過去5年間のStartDateの結果のみが返されます。
私が望むように、場所以外は何も戻っていません。私はそれが誤ったAND/OR構文のためだと思いますが、これを行う方法を説明している以前のSOの質問を見つけることができません(もしあれば、私はそれを逃しました、私は謝ります)。
可能な重複[SQLロジック演算子の優先順位:ANDとOR](http://stackoverflow.com/questions/1241142/sql-logic-operator-precedence-and -and-or) –
あなたのクエリにはカッコが必要です。 – jarlh
また、位置文字列、役割、タイトルをLIKEでJOINすることで、クエリが簡単になり、クエリー自体を変更することなく追加/削除が容易になります。 –