1

以下2条语句是加入使用gift.giftID = sentgifts.giftID:

mysql> select * from gifts, sentgifts using (giftID);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'using
 (giftID)' at line 1

第二个:

mysql> select * from gifts INNER JOIN sentgifts using (giftID);
+--------+------------+----------------+---------------------+--------+------------+--------+------+---------------------+
| giftID | name       | filename       | effectiveTime       | sentID | whenSent   | fromID | toID | trytryWhen          |
+--------+------------+----------------+---------------------+--------+------------+--------+------+---------------------+
|      2 | teddy bear | bear.jpg       | 2010-04-24 04:36:03 |      4 | 2010-04-24 |   NULL |  111 | 2010-04-24 03:10:42 |
|      6 | beer       | beer_glass.png | 2010-04-24 05:18:12 |      5 | 2010-03-03 |     11 |   22 | 2010-03-03 00:00:00 |
|      6 | beer       | beer_glass.png | 2010-04-24 05:18:12 |      6 | 2010-04-24 |     11 |  222 | 2010-04-24 03:54:49 |
|      6 | beer       | beer_glass.png | 2010-04-24 05:18:12 |      7 | 2010-04-24 |      1 |    2 | 2010-04-24 03:58:45 |
+--------+------------+----------------+---------------------+--------+------------+--------+------+---------------------+
4 rows in set (0.00 sec)

第一条语句也可以使用“使用”速记吗?似乎在使用时必须指定“Inner Join”这个词......但第一个语句实际上是一个内连接?

更新:如果不能完成,有什么原因吗?第一条声明实际上已经足够清楚了要做什么......有禁止它的理由吗?

4

2 回答 2

2

这不可以。您必须在JOIN要加入的表之间使用关键字USING才能工作。

这是 MySQL手册中的相关语法:

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)

此外,还不清楚您要使用您使用的第一种语法来完成什么。它可以是外部连接或内部连接。您可以争辩说,当不存在时,解释器应该将其视为内部连接,但这会令人困惑。此外,这将是一种新的、非标准的语法,这绝对是不可以的,恕我直言。

于 2010-04-24T13:11:46.260 回答
0

使用条件只是为了防止您必须像这样输入它。

SELECT * FROM GIFTS INNER JOIN SENTGIFTS ON GIFTS.giftID = SENTGIFTS.giftID

因此,它可以防止您输入 ON 条件。您仍然必须指定它是一个内部连接。

作为对您的编辑的回应,它不起作用的原因是因为您没有指定要执行哪种联接。你在做内联吗?离开加入?外联?服务器的 SQL 解释器不能假定您使用的是哪一个。

于 2010-04-24T13:13:36.003 回答