你写的是哪个SQL?

Adr*_*ong 2 t-sql conditional join where-clause

当连接两个表时,下面两个块之间有什么区别,哪个是更好的方法?

模式A:

SELECT ...
FROM A
    INNER JOIN B
        ON A.PK = B.FK
WHERE 1=1
    AND A.Name = "Foo"
    AND B.Title = "Bar"
Run Code Online (Sandbox Code Playgroud)

模式B:

SELECT ...
FROM A
    INNER JOIN B
        ON A.PK = B.FK
            AND B.Title = "Bar"
WHERE 1=1
    AND A.Name = "Foo"
Run Code Online (Sandbox Code Playgroud)

bog*_*ron 13

这种情况因人而异,但我认为模式A更好.

它的作用是将表级连接与过滤器分开.这对于具有多个连接和多个过滤器的查询非常有用,因为它清楚地区分了正在进行的两种类型的连接.