ON子句是否在其他地方使用而不是JOIN?

时间:2013-02-03 12:26:33

标签: mysql

SELECT * FROM Table JOIN Other ON Table.id = Other.tableId

我正在构建一个MySQL包装器,并想知道“ON”关键字是仅与联接(如上所述)一起使用,还是在其他地方使用?

4 个答案:

答案 0 :(得分:1)

你无法单独使用ON。它仅用于JOIN s

但你可以在没有ON的情况下使用它们

   JOIN ... USING   //--according to SQL:2003

为例:

a LEFT JOIN b USING (c1,c2,c3)
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

编辑:

ON子句可以引用其右侧命名的表中的列。在下面的示例中,ON子句只能引用其操作数。

示例:

  CREATE TABLE t1 (i1 INT);
  CREATE TABLE t2 (i2 INT);
  CREATE TABLE t3 (i3 INT);
  SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3;

答案 1 :(得分:1)

{/ 1}} 关键字也用于

其中一些特定于MySQL。

答案 2 :(得分:0)

仅在使用ANSI SQL-92 JOIN时出现。 没有别的

答案 3 :(得分:0)

还找到了ON个关键字,可以在其他几个地方使用,例如 CREATE TABLE ALTER TABLE表语句(在FOREIGN KEY中定义:ON DELETE CASCADE), CREATE TRIGGER 语法(ON tbl_name FOR EACH ROW), CREATE INDEX 语句等。


对于联接,MySQL文档中的 JOIN syntax 包含所有内容:

  

MySQL支持JOIN语句的table_references部分以及多表SELECTDELETE语句的以下UPDATE语法:

table_references:
    table_reference [, table_reference] ...

table_reference:
    table_factor
  | join_table

table_factor:
    tbl_name [[AS] alias] [index_hint_list]
  | table_subquery [AS] alias
  | ( table_references )
  | { OJ table_reference LEFT OUTER JOIN table_reference
        ON conditional_expr }

join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]
  | table_reference STRAIGHT_JOIN table_factor
  | table_reference STRAIGHT_JOIN table_factor ON conditional_expr
  | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

join_condition:
    ON conditional_expr
  | USING (column_list)

因此,ON可用于SELECTUPDATEDELETE语句。它可以与JOINLEFT JOINRIGHT JOIN(以及等效的INNER JOINLEFT OUTER JOINRIGHT OUTER JOIN)一起使用。

要使用ONUSING,而不是两者。

它不能与NATURAL JOIN一起使用(当然。)

与ANSI / ISO SQL标准有一些区别:

  • 您可以将ONCROSS JOIN一起使用。

  • 也(可选)与STRAIGHT_JOIN(这是MySQL的补充)

  • 您可以使用JOININNER JOIN ,无 ON

  • UPDATEDELETE语法也与标准存在一些差异。