Может MySQL / стенография SQL “Использования” использоваться, не говоря “Внутреннее объединение”?

Следующие 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)

Первый оператор может также использовать стенографию "использования"? Кажется, что, когда это используется затем, слово "Inner Join" должно быть указано..., но первый оператор является на самом деле внутренним объединением?

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

1
задан 太極者無極而生 24 April 2010 в 13:13
поделиться

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)

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

2
ответ дан 3 September 2019 в 01:02
поделиться

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

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

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

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

0
ответ дан 3 September 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: