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

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

4

4 回答 4

1

你不能在ON某个地方单独使用。它仅与JOINs一起使用

但是你可以在没有 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;
于 2013-02-03T12:33:13.640 回答
1

ON 关键字也用于

其中一些是特定于 MySQL 的。

于 2013-02-03T12:52:11.990 回答
0

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

于 2013-02-03T12:30:58.553 回答
0

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


对于连接,MySQL 文档中的JOIN语法包含所有内容:

MySQL 支持JOIN语句的 table_references 部分SELECT和多表DELETEUPDATE语句的以下语法:

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可以用在SELECT,UPDATEDELETE语句中。它可以与JOIN, LEFT JOIN, RIGHT JOIN(以及等效的INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN)一起使用。

要么ONUSING将被使用,而不是两者。

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

以及与 ANSI/ISO SQL 标准的一些区别:

  • 你可以ON使用CROSS JOIN.

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

  • 您可以使用JOININNER JOIN ON使用.

  • UPDATE并且DELETE语法与标准也有一些差异。

于 2013-02-03T12:46:52.610 回答