SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
我正在构建一个MySQL包装器,并想知道“ON”关键字是仅与联接(如上所述)一起使用,还是在其他地方使用?
答案 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部分以及多表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
语法也与标准存在一些差异。