SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
我正在构建一个 MySQL 包装器,并且想知道“ON”关键字是否仅与连接(如上)一起使用,还是在其他地方使用?
SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
我正在构建一个 MySQL 包装器,并且想知道“ON”关键字是否仅与连接(如上)一起使用,还是在其他地方使用?
你不能在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;
该ON 关键字也用于
其中一些是特定于 MySQL 的。
它仅在使用时出现 ANSI SQL-92 JOIN。没有别的。
该ON关键字也可以在其他几个地方找到,例如CREATE TABLE和ALTER TABLE表语句(在FOREIGN KEY定义中:) ON DELETE CASCADE,在CREATE TRIGGER语法(ON tbl_name FOR EACH ROW)中,在CREATE INDEX语句中,等等。
对于连接,MySQL 文档中的JOIN语法包含所有内容:
MySQL 支持
JOIN语句的 table_references 部分SELECT和多表DELETE和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可以用在SELECT,UPDATE和DELETE语句中。它可以与JOIN, LEFT JOIN, RIGHT JOIN(以及等效的INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN)一起使用。
要么ON或USING将被使用,而不是两者。
它不能与NATURAL JOIN(当然)一起使用。
以及与 ANSI/ISO SQL 标准的一些区别:
你可以ON使用CROSS JOIN.
也(可选)与STRAIGHT_JOIN(这是 MySQL 的补充)
您可以使用JOIN和INNER JOIN 不 ON使用.
UPDATE并且DELETE语法与标准也有一些差异。