相关疑难解决方法(0)

INNER JOIN ON vs WHERE子句

为简单起见,假设所有相关字段都是NOT NULL.

你可以做:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1, table2
WHERE
    table1.foreignkey = table2.primarykey
    AND (some other conditions)
Run Code Online (Sandbox Code Playgroud)

要不然:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1 INNER JOIN table2
    ON table1.foreignkey = table2.primarykey
WHERE
    (some other conditions)
Run Code Online (Sandbox Code Playgroud)

这两个是以同样的方式工作MySQL吗?

mysql sql join inner-join

893
推荐指数
9
解决办法
57万
查看次数

哪个SQL查询更快?过滤加入条件或Where子句?

比较这两个查询.将过滤器放在连接条件或are子句中是否更快.我一直认为它在连接标准上更快,因为它在最快的时刻减少了结果集,但我不确定.

我将构建一些测试来查看,但我也希望得到关于哪个更清晰易读的意见.

查询1

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
WHERE       a.ID = 1            /* <-- Filter here? */
Run Code Online (Sandbox Code Playgroud)

查询2

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
        AND a.ID = 1            /* <-- Or filter here? */
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
Run Code Online (Sandbox Code Playgroud)

编辑

我运行了一些测试,结果显示它实际上非常接近,但该WHERE条款实际上稍快一点!=)

我绝对同意在WHERE条款上应用过滤器更有意义,我只是对性能影响感到好奇.

已确认的时间标准: 143016 ms
已安排时间加入标准: 143256 ms

测试

SET …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008

83
推荐指数
3
解决办法
6万
查看次数

LEFT JOIN 从左表中获取所有行,无论连接条件如何

我正在尝试执行左连接,以便从左表中获取所有行,即使这些行的连接条件不成立。

示例:下面的 Aid = Bid 但表 B 只有 3 个 id

在此输入图像描述

我正在使用的查询仅给出连接条件为真的行。即使连接条件不成立,有没有办法从左表中获取所有行?

我的查询:

SELECT Table1.Aid,
       Table2.Bid,
       Table2.Issueid
  FROM Table1
       LEFT JOIN Table2 ON Table1.Aid = Table2.Bid;

 WHERE Table2.Issueid IN (
    'a',
    'b'
)
Run Code Online (Sandbox Code Playgroud)

sql oracle join oracle-sqldeveloper

4
推荐指数
1
解决办法
8765
查看次数