Можно ли использовать сокращение MySQL / SQL «Использование», не говоря «Внутреннее соединение»? - PullRequest
1 голос
/ 24 апреля 2010

Следующие 2 утверждения должны присоединиться с использованием gifts.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)

Может ли первое утверждение также использовать сокращение "using"? Кажется, что когда оно используется, тогда должно быть указано слово «Внутреннее соединение» ... но первое утверждение на самом деле является внутренним соединением?

Обновление: если это невозможно, есть ли причина? Первое утверждение на самом деле достаточно ясно, что должно быть сделано ... есть ли причина, по которой оно запрещено?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

не может. Вы должны использовать ключевое слово 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)

Кроме того, не очень ясно, что вы пытаетесь выполнить с помощью первого используемого вами синтаксиса. Это может быть внешнее или внутреннее соединение. Вы можете утверждать, что если отсутствует, переводчик должен рассматривать это как внутреннее соединение, но это может сбить с толку. Кроме того, это будет новый, нестандартный синтаксис, который определенно будет «нет, нет», imho.

0 голосов
/ 24 апреля 2010

Условие использования существует только для того, чтобы вам не приходилось печатать его так.

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

Так что вам не нужно вводить это условие ВКЛ. Вы все еще должны указать, что это внутреннее соединение.

В ответ на ваше редактирование причина, по которой он не работает, заключается в том, что вы не указываете, какое объединение вы хотите сделать. Вы делаете внутреннее соединение? Осталось присоединиться? Внешнее соединение? SQL-интерпретатор сервера не может предположить, какой из них вы используете.

...