【问题标题】:Using, On or Where to combine two queriesUsing、On 或 Where 组合两个查询
【发布时间】:2012-09-20 05:36:06
【问题描述】:

为了加快某些查询,我将一个大表拆分为两个表(一个具有固定行格式,另一个具有动态行格式),每个共享相同的主键和相同的总行数,但包含不同的列。

某些查询需要两个表中的信息。要在一个查询中获取所需的数据,我可以选择执行以下操作:

SELECT A.col2, B.col3 FROM A INNER JOIN B ON A.col1=B.col1 WHERE A.col1=?

SELECT A.col2, B.col3 FROM A INNER JOIN B USING (col1) WHERE A.col1=?

SELECT A.col2, B.col3 FROM A, B WHERE A.col1=? AND B.col1=?

从 EXPLAIN SELECT 语句中,我看不出任何差异。我想要一些建议是否真的如此。

【问题讨论】:

    标签: mysql select join


    【解决方案1】:

    前两个查询中使用的语法首先出现在 ANSI SQL-92 标准 (text link) 中:

     <join specification> ::=
                    <join condition>
                  | <named columns join>
    
     <join condition> ::= ON <search condition>
     <named columns join> ::= USING <left paren> <join column list> <right paren>
    

    基本上,USING (col1) 的含义与ON a.col1 = b.col1 相同。

    您的第三个查询,如果更新为...

    SELECT A.col2, B.col3 
      FROM A, B 
     WHERE A.col1 = B.col1 AND A.col1=? AND B.col1=?
    

    ... 是 'old-school' JOIN 的示例,因为该语法在 ANSI SQL-92 之前使用。

    说了这么多,所有三个查询都应该被解析为等价的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 2011-06-14
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 2019-05-06
      相关资源
      最近更新 更多