テーブルエイリアスを備えたMySQL挿入
-
11-10-2019 - |
質問
私はたまたま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)
挿入ステートメントにテーブルエイリアスを作成できないようです
一部のSQL製品(SQL Serverなど)はこれを許可していますが、それが良いことかどうかはわかりません。
SQL標準によると、エイリアスはテーブルが実現される効果を持つ必要があります。 INSERT
エイリアステーブルへの(または更新のその他のフレーバー)、基礎となるベーステーブルを影響を受けないようにする必要があります。
SQL Serverで、そのような INSERT
基礎となるベーステーブルに影響を与えますが、実際の(非準拠)効果は、ほとんどのSQLコーダーがその状況で起こると予想されることだと思います。別の言い方をすれば、標準のSQLが機能するはずであるにもかかわらず、最初はバグとして疑われると思われる行が追加されていない有効な挿入ステートメントがあります。
ですから、私の意見では、最初の場所で状況が発生することを許可することは、技術的に標準に順応していないことが望ましいと思います。