4

たまたま、2つのSQL予約語KeyとValueと同じ名前の2つの列があります。SELECTステートメントを使用すると、テーブルエイリアスを作成し、その方法で解決できます。

現在、データをINSERTしようとしていますが、INSERTステートメントでテーブルエイリアスを作成できないようです。

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')'エイリアスを作成できないことを示すときにエラーが発生します。

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

4

4 に答える 4

5

予約語をエスケープするには、バックティックを使用します。

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

挿入はエイリアスをサポートしていないようです。ここを参照してください


編集:わかりました、MySQLrefは挿入にエイリアスがないと言っています


それは動作します

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)
于 2011-01-17T10:34:52.097 に答える
1

あなたの質問に基づいて賢い人になるのは簡単です

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

その他の問題

Windowsはまだ大文字と小文字を区別するファイル名をサポートしていないため、キャメルケースがあることは意味がありません。

したがって、Linux / Macでは大文字と小文字が異なる同じテーブルを実際に使用できますが、Windowsでは使用できません

mysql> create table abc(id int(10));
クエリOK、影響を受けた0行(0.00秒)

mysql> create table abC(id int(10));
クエリOK、影響を受けた0行(0.01秒)
于 2011-01-17T11:48:47.283 に答える
0

キーは

予約語

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

ここですべての予約語を確認できます

于 2011-01-20T07:31:00.387 に答える
0

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

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

SQL標準によると、エイリアスはテーブルが実体化される効果を持つ必要があります。つまり、INSERTエイリアステーブルへの(またはその他の種類の更新)は、基になるベーステーブルに影響を与えないようにする必要があります。

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

ですから、私の意見では、そもそも状況が発生することを禁止する一方で、技術的には標準に準拠していないことが望ましいと思います。

于 2011-05-05T07:54:26.030 に答える