質問

私はたまたま2つのSQL予約単語、キーと価値と同じ名前を持つ2つの列があります。 Selectステートメントを使用すると、テーブルエイリアスを作成してそのように解決できます。

今、私はデータを挿入しようとしていますが、挿入ステートメントにテーブルエイリアスを作成できないようです。

INSERT INTO attributeStrings ats
(ats.ItemID,ats.Key,ats.Value)
VALUES (3,'Categories','TechGUI')

でエラーが発生します 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')' エイリアスを作成できないことを示します。

列のキーと値を名前に変更せずにこれを解決する方法はありますか?

役に立ちましたか?

解決

バックチックを使用して、予約された言葉を逃れます。

  INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI')

INSERTはエイリアスをサポートしていないようです。 こちらをご覧ください


編集:OK、mysql refは挿入にエイリアスがないと言っています


それは機能します

mysql> INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI');
Query OK, 1 row affected (0.03 sec)

mysql> select * from attributeStrings;
+--------+------------+---------+
| ItemId | Key        | Value   |
+--------+------------+---------+
|      3 | Categories | TechGUI |
+--------+------------+---------+
1 row in set (0.00 sec)

他のヒント

簡単になります 賢い男 あなたの質問に基づいて

INSERT INTO attributeStrings
VALUES (3,'Categories','TechGUI');
/* if the table have more than 3 columns, fill-up every column then */

その他の問題

Windowsはまだケースに敏感なファイル名をサポートしていないため、CamelCaseを持つことは意味がありません。

したがって、あなたは実際にLinux/Macで異なるケースを持つ同じテーブルを持つことができますが、Windowsではそうではありません

mysql> create table abc (id int(10));
Query OK, 0 rows affected (0.00 sec)

mysql> create table abC (id int(10));
Query OK, 0 rows affected (0.01 sec)

キーはaです

予約済みの単語

MySQLでは、引用する必要があります

予約されたすべての単語を確認できます ここ

挿入ステートメントにテーブルエイリアスを作成できないようです

一部のSQL製品(SQL Serverなど)はこれを許可していますが、それが良いことかどうかはわかりません。

SQL標準によると、エイリアスはテーブルが実現される効果を持つ必要があります。 INSERT エイリアステーブルへの(または更新のその他のフレーバー)、基礎となるベーステーブルを影響を受けないようにする必要があります。

SQL Serverで、そのような INSERT 基礎となるベーステーブルに影響を与えますが、実際の(非準拠)効果は、ほとんどのSQLコーダーがその状況で起こると予想されることだと思います。別の言い方をすれば、標準のSQLが機能するはずであるにもかかわらず、最初はバグとして疑われると思われる行が追加されていない有効な挿入ステートメントがあります。

ですから、私の意見では、最初の場所で状況が発生することを許可することは、技術的に標準に順応していないことが望ましいと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top