Mysql ON子句是否用于JOIN以外的其他位置?
我正在构造一个MySQL包装器,想知道“ON”关键字是否仅用于连接(如上文所述),还是也用于其他地方?它仅在使用Mysql ON子句是否用于JOIN以外的其他位置?,mysql,Mysql,我正在构造一个MySQL包装器,想知道“ON”关键字是否仅用于连接(如上文所述),还是也用于其他地方?它仅在使用ANSI SQL-92 JOIN时出现。没有别的。你不能在某个地方单独使用。它仅与JOINs一起使用 但是连接你可以不用像那样使用它们 SELECT * FROM Table JOIN Other ON Table.id = Other.tableId 例如: JOIN ... USING //--according to SQL:2003 编辑: ON子句可以引用其右侧
ANSI SQL-92 JOIN
时出现。没有别的。你不能在某个地方单独使用。它仅与JOIN
s一起使用
但是连接你可以不用像那样使用它们
SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
例如:
JOIN ... USING //--according to SQL:2003
编辑:
ON
子句可以引用其右侧名为的表中的列。下面的示例ON
子句只能引用其操作数
例如:
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
在
上的关键字也可以找到,并且可以在其他几个地方,比如和ALTER TABLE
表格语句(在外键
定义中:ON DELETE CASCADE
),在语法中(关于每行的tbl_名称),在
语句中,等等
对于连接,MySQL文档中的包含了所有内容:
MySQL支持以下JOIN
syntax,用于SELECT
语句和多个表DELETE
和UPDATE
语句的表引用部分:
因此,
上的可用于选择
、更新
和删除
语句。它可以与连接
,左连接
,右连接
(以及等效的内部连接
,左外部连接
,右外部连接
)一起使用
可以使用
上的或使用的,而不是两者都使用
它不能与自然联接一起使用(当然)
与ANSI/ISO SQL标准的一些差异:
- 您可以将
上的与交叉连接一起使用
直接连接(这是MySQL添加)
连接
和内部连接
,而不使用上的
UPDATE
和DELETE
语法与标准也有一些不同ON关键字也用于
其中一些是MySQL特有的。您已经拥有my+1。但是,删除/更新时的
、创建触发器和授予都是标准的SQL。SQL Server中也使用了CREATE INDEX
。
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;
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)