我怎样才能将条件应用于 SQL 中多重连接的一部分?

how can I apply a condition to just one part of a multiple join in SQL?

我的示例查询是:

SELECT
    tab1.col1, tab2.col1, tab3.col2    
FROM
    tab1 JOIN tab2 ON tab1.col1=tab2.col1
    left JOIN tab3 ON tab1.col2=tab3.col2
WHERE blah blah GROUP BY blah blah HAVING blah blah;

我想将一个条件(例如 "where" or "having" 应用到一个连接而不是另一个连接。我该怎么做?

"SELECT ___, ___, ___ FROM tab1 JOIN tab2 ON ___ WHERE ___ JOIN tab3 ON ___ WHERE ___ GROUP BY ___" 似乎是不可能的。

感谢您的帮助。

SELECT
    tab1.col1, tab2.col1, tab3.col2    
FROM
    (select * from tab1 where / having) tab1 JOIN tab2 ON tab1.col1=tab2.col1
    left JOIN 
    (select  *from tab3 where / having) tab3 ON tab1.col2=tab3.col2

这是你想要的吗?

以下可能对您有所帮助:-

select c.A,c.C ,tab3.col2 
from 
(select tab1.col1 A , tab1.col2 B,tab2.col1 C,tab2.col2 D from tab1 JOIN tab2 ON tab1.col1=tab2.col1 where _____) c
JOIN tab3 ON c.B=tab3.col2 where  ____ GROUP BY __________

有多种方法可以实现

首先是将过滤子句简单地放在查询的末尾。大多数情况下,这必须产生相同的结果,但在某些情况下,情况可能并非如此。

SELECT
        tab1.col1, tab2.col1, tab3.col2
FROM
        tab1
JOIN
        tab2
        ON tab1.col1=tab2.col1
LEFT JOIN
        tab3
        ON tab1.col2=tab3.col2
WHERE
        blah blah
        AND
        desired_column=filter_value
GROUP BY
        blah blah
HAVING
        blah blah
;

第二种选择是使用嵌套查询。这种方法更有可能产生您喜欢的结果。智能查询优化器可能将此查询重写为上面的查询,反之亦然。

SELECT
        tab1.col1, tab2.col1, tab3.col2
FROM
        tab1
JOIN
        (SELECT col1, col2 FROM tab2 WHERE desired_column=filter_value) tab2
        ON tab1.col1=tab2.col1
LEFT JOIN
        tab3
        ON tab1.col2=tab3.col2
WHERE
        blah blah
GROUP BY
        blah blah
HAVING
        blah blah
;

如果您使用 INNER JOIN,第三个选项是将此作为连接条件的一部分提及

SELECT
        tab1.col1, tab2.col1, tab3.col2
FROM
        tab1
JOIN
        tab2
        ON tab1.col1=tab2.col1
        AND
        desired_column=filter_value
LEFT JOIN
        tab3
        ON tab1.col2=tab3.col2
WHERE
        blah blah
GROUP BY
        blah blah
HAVING
        blah blah
;

如果您不想过滤集合并且只根据提到的标准关联,您也可以将最后一个与 OUTER JOINs 一起使用。