SELECTを使用した挿入


287

選択を使用して挿入するクエリがあります。

INSERT INTO courses (name, location, gid) 
            SELECT name, location, gid 
              FROM courses 
             WHERE cid = $cid

挿入で「名前、場所」のみを選択し、クエリでgidを別のものに設定することは可能ですか?

回答:


547

はい、もちろんですが、構文を確認してください。

INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM   courses
WHERE  cid = 2

gidもちろん、1だけではなく、その場所と同じ型の定数を置くことができます。そして、私はそのcid価値を作り上げました。


2
お疲れ様でした。Insert Selectでは、フィールド名の前後に括弧は必要ありません。しかし、selectの上に値を指定し始めると、明らかにフィールド名の周りに()が必要になります。
カイル

[...]失敗します「INSERT INTOコースT1(t1.name、t1.location、t1.gid):あなたは、挿入句で別名を使用できないことに注意してください
ラファエル

@Andrew次回selectを実行せずにこの同じselectを返すメソッドはありますか?コーステーブルの結果を挿入して取得したい場合
TAHA SULTAN TEMURI

1
@TAHASULTANTEMURI別の質問。しかし、私があなたの質問を理解している場合、SQL Server(尋ねられたものではなく、最近使用しているもの)にはOUTPUT句があり、挿入したものを別のテーブルにも挿入できます。MySQLに同等のものはないと思います。あなたは可能性がある一時テーブルを作成移入、その後、そのテーブルに選択し、coursesその後、あなたが必要な任意の他のために一時テーブルを使用し、そのテーブルから。
Andrew

31

はい、そうです。あなたは書ける :

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

または、selectの別の結合から値を取得できます...


INSERT INTOコース名、場所、gid SELECT名、場所、 '$ this-> gid' FROMコースWHERE cid = $ cid-エラーが発生します:SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、 'name、location、gid SELECT name、location、' 22 'FROM courses WHERE cid = 23' at line 1
Kyle

あなたのgidフィールドは整数なので、'22 'は22でなければなりません。' $ this-> gid 'を$ this-> gidで変更してください
Alex Reche Martinez

22と '22'はsqlには関係ありませんが、フィールドが一意の識別子に類似している場合に備えて文字列を挿入します。
Dumitrescu Bogdan

8

正しい構文:選択したスペルが間違っていた

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci 

5

確かに、gidに何を使用しますか?静的な値、PHP変数、...

1234の静的な値は次のようになります。

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid


1

もちろんできます。

ただし、注意すべき点がINSERT INTO SELECT1つあります。このステートメントでは、あるテーブルからデータをコピーして別のテーブルに挿入し、さらにソーステーブルとターゲットテーブルのデータ型が一致する必要があります。与えられた表の列からのデータ型が一致しない場合(つまり挿入しようVARCHARINT、またはTINYINTINTMySQLサーバがスローされます)SQL Error (1366)

ので注意してください。

コマンドの構文は次のとおりです。

INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;

補足:でキャストを使用してSELECT、さまざまな列タイプの挿入の問題を回避する方法があります。次に例を示します。

SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

この変換(のCAST()同義語CONVERT())は、テーブルの同じテーブル列に異なる文字セットがある場合に非常に役立ちます(適切に処理されない場合、データが失われる可能性があります)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.