为什么 MySQL 的 "USING" 子句的这种用法不正确?

Why is this usage of MySQL's "USING" clause incorrect?

在使用 InnoDB 引擎的 MySQL v5.7 中,我有一个名为 birds 的 table 和另一个名为 conservation_statusconservation_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)