2016-09-18 20 views
1

私は2つのテーブルを持っています。そのうちの1つは 'user_flag'で、もう1つは 'playlist_data'です。別のテーブルから挿入して新しい値を挿入してください

'user_flag'のすべての 'object_id'列エントリを 'playlist_data'の 'object_id'列に配置したいが、それらのエントリが 'user'エントリとして '3'を持つ場合のみ、彼らはすでに存在していない(重複する 'object_id's!)はありません。

私はそれを行う方法を学習しようとしましたが、これは私が見つけたものです:

INSERT INTO playlist_data (object_id) 
SELECT object_id FROM user_flag 
WHERE user='3'; 
ON DUPLICATE KEY UPDATE object_id=object_id 

が、この作品は、適切ウィル?

しかし、私はまた、同時に複数の操作を行いますしようとしている、と私は答えを見つけるように見えることはできません。

1)私もこれで新しいデータを挿入します。私は、新しく挿入されたすべてのエントリに、 'playlist_data'の 'filetype'カラムに '5'を含めるようにします。

は、このすべての真ん中に私はちょうど

INSERT INTO playlist_data (filtype) 
VALUES (5) 

ていますか?

2)両方のテーブルにも 'id'カラムがあります。最新の 'id'の 'playlist_data'から自動的に新しいIDが生成されますか?

たとえば、 'user_flag'から 'id'が '150'のエントリを転送していますが、 'playlist_data'の最高の 'id'は '63' 64 '、または何とかそれを定義する必要がありますか?

答えて

0

だけSELECTに値を追加します。

INSERT INTO playlist_data (object_id, filtype) 
    SELECT object_id, 5 
    FROM user_flag 
    WHERE user = 3 
    ON DUPLICATE KEY UPDATE object_id = VALUES(object_id); 

注:

  • Iは、ID列が数字であることを推測しています。したがって、私は単一引用符を削除しました。
  • ON DUPLICATE KEY UPDATEではVALUES(object_id)を使用しています。
  • ステートメントの最後にセミコロンを付けることが重要です。
+0

それはうまくいかなかった理由を説明しています。私はセミコロンを正しく配置しませんでした。私は今理解し始めています。それはすべて1つの文です。レイアウトを改善するために複数の行に分かれています。しかし、 'user_flag'に 'filetype'カラムがないことを忘れてしまった。新しい値を完全に挿入したいだけで、 'user_flag'から転送するのではない。 – Potatoman

+0

コーセのこのコードは値5を挿入します。 –

+0

@Potatoman 'SELECT'クエリを単独で読むと、' user_flag'から 'filtype'にアクセスしようとしていないことがわかります。その列でリテラル「5」を選択するだけです。 – Barmar

関連する問題