1

次の 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

そして2番目のもの:

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」省略形を使用できますか? 使用時は「内部結合」という言葉を指定する必要があるようですが、最初のステートメントは実際には内部結合ですか?

更新:それができない場合、理由はありますか?最初のステートメントは、実際に何をすべきかを十分に明確にしています...それが禁止されている理由はありますか?

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

using 条件は、このように入力する必要がないようにするためだけに存在します。

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

そのため、その ON 条件を入力する必要がなくなります。内部結合であることを指定する必要があります。

編集に応じて、それが機能しない理由は、実行したい結合の種類を指定していないためです。インナージョインしてますか?左合流?外部結合?サーバーの SQL インタープリターは、どちらを使用しているかを推測できません。

于 2010-04-24T13:13:36.003 に答える