问题背景:
我有一个由其他开发人员编辑过的简单存储过程。他们在有一个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和WHERE子句实际上是在做同样的工作。如果存在匹配,则连接将自动过滤PROFILE_ID,并且WHERE子句将执行相同的操作。
我可以安全地假设AND或WHERE子句是必需的,但不是两者都可以吗?
答案 0 :(得分:0)
在此LEFT JOIN
案例中,您可以将右侧表格条件移至ON
子句:
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