为什么 MySQL 的 "USING" 子句的这种用法不正确?
Why is this usage of MySQL's "USING" clause incorrect?
在使用 InnoDB 引擎的 MySQL v5.7 中,我有一个名为 birds
的 table 和另一个名为 conservation_status
的 conservation_status
,如下所示:
mysql> describe birds;
+------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+----------------+
| bird_id | int(11) | NO | PRI | NULL | auto_increment |
| scientific_name | varchar(100) | YES | UNI | NULL | |
| common_name | varchar(255) | YES | | NULL | |
| family_id | int(11) | YES | | NULL | |
| conservation_status_id | int(11) | YES | | NULL | |
| wing_id | char(2) | YES | | NULL | |
| body_id | char(2) | YES | | NULL | |
| bill_id | char(2) | YES | | NULL | |
| description | text | YES | | NULL | |
+------------------------+--------------+------+-----+---------+----------------+
mysql> describe conservation_status;
+------------------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+----------+------+-----+---------+----------------+
| conservation_status_id | int(11) | NO | PRI | NULL | auto_increment |
| conservation_category | char(10) | YES | | NULL | |
| conservation_state | char(25) | YES | | NULL | |
+------------------------+----------+------+-----+---------+----------------+
我正在试验 USING
子句,我试图用这样的子句连接 conservation_status_id
列上的两个 table,但我得到了一个与我使用列名相关的错误:
select * from birds join conservation_status USING conservation_status_id;
我知道 USING
的用例是用于连接两个 table 的列在每个 table 中具有相同的名称,因此问题不可能不明确的列名匹配。
我已在 MySQL docs 中验证我的 MySQL 版本支持此子句,并且我已验证列名称中没有拼写错误。
我做错了什么?
USING
的参数必须在括号中。它不仅仅是一个列标识符,它是一个 元组 .
select * from birds join conservation_status USING (conservation_status_id);
它需要是一个元组,因为您可以连接多个列,例如:
select * from table1 join table2 USING (col1, col2, col3)
在使用 InnoDB 引擎的 MySQL v5.7 中,我有一个名为 birds
的 table 和另一个名为 conservation_status
的 conservation_status
,如下所示:
mysql> describe birds;
+------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+----------------+
| bird_id | int(11) | NO | PRI | NULL | auto_increment |
| scientific_name | varchar(100) | YES | UNI | NULL | |
| common_name | varchar(255) | YES | | NULL | |
| family_id | int(11) | YES | | NULL | |
| conservation_status_id | int(11) | YES | | NULL | |
| wing_id | char(2) | YES | | NULL | |
| body_id | char(2) | YES | | NULL | |
| bill_id | char(2) | YES | | NULL | |
| description | text | YES | | NULL | |
+------------------------+--------------+------+-----+---------+----------------+
mysql> describe conservation_status;
+------------------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+----------+------+-----+---------+----------------+
| conservation_status_id | int(11) | NO | PRI | NULL | auto_increment |
| conservation_category | char(10) | YES | | NULL | |
| conservation_state | char(25) | YES | | NULL | |
+------------------------+----------+------+-----+---------+----------------+
我正在试验 USING
子句,我试图用这样的子句连接 conservation_status_id
列上的两个 table,但我得到了一个与我使用列名相关的错误:
select * from birds join conservation_status USING conservation_status_id;
我知道 USING
的用例是用于连接两个 table 的列在每个 table 中具有相同的名称,因此问题不可能不明确的列名匹配。
我已在 MySQL docs 中验证我的 MySQL 版本支持此子句,并且我已验证列名称中没有拼写错误。
我做错了什么?
USING
的参数必须在括号中。它不仅仅是一个列标识符,它是一个 元组 .
select * from birds join conservation_status USING (conservation_status_id);
它需要是一个元组,因为您可以连接多个列,例如:
select * from table1 join table2 USING (col1, col2, col3)