2017-11-30 19 views
0

質問の背景:冗長なWHERE句?

私は別の開発者によって編集されたシンプルなストアドプロシージャを持っています。 WHERE句が存在する前に、いくつかのSQLにAND節を追加しました。開発者は、AND句とWHERE句の両方が存在しなければならないと主張しています。

SQL:

SELECT a.NOTIFICATIONID, 
a.NOTIFICATIONTYPE, 
a.DESCRIPTION, 
b.NOTIFICATIONID, 
b.SEEN, 
b.SEEN_DATE, 
b.PROFILEID 
FROM dbo.NOTIFICATIONS a 
LEFT JOIN dbo.NOTIFICATIONSTATUS b 
ON a.NOTIFICATIONID = b.NOTIFICATIONID 
AND b.PROFILEID = @profileId 
WHERE (b.PROFILEID = @profileId or b.PROFILEID is null) 
WHERE (b.DISMISSED = 0 or b.dismissed is null) 

私は句が有効で同じ仕事をしているANDとを見ることができるものから。一致するものがあれば結合は自動的にPROFILE_IDをフィルタリングし、WHERE句は同じことを行います。

私は、AND句またはWHERE句のいずれかが必須であるが、両方ではないと想定するのは安全でしょうか?

答えて

0

あなたはON句に右サイドテーブルの条件を移動することができます。このLEFT JOIN場合:b.PROFILE_IDフィールドはもはや有効であるよう

SELECT a.NOTIFICATIONID, 
a.NOTIFICATIONTYPE, 
a.DESCRIPTION, 
b.NOTIFICATIONID, 
b.SEEN, 
b.SEEN_DATE, 
b.PROFILEID 
FROM dbo.NOTIFICATIONS a 
LEFT JOIN dbo.NOTIFICATIONSTATUS b 
ON a.NOTIFICATIONID = b.NOTIFICATIONID 
AND b.PROFILEID = @profileId 
AND b.DISMISSED = 0 
+0

多くのおかげで、私はSQLをmiscopiedません。 – user1352057

+0

'AND b.PROFILE_ID = @profileId'を削除する必要がありますか? – jarlh

+0

これは正しいです – user1352057