web-dev-qa-db-ja.com

MySQL-INSERT、VALUES、およびSELECTを組み合わせる?

私はSQLの初心者ですが、実際に操作しているのは、ハイスコアデータベースを機能させるのに十分なだけです。 PHPスクリプトを使用してオンラインのMySQLデータベースにアクセスしています。いずれかの方法。

私が持っているのは、プレイヤーとスコアの2つのテーブルです。プレーヤーには、id、uniqueDeviceId、chosennameがあります。スコアはあなたが期待する通常のものを持っています。

(複雑さを減らすために)単一のクエリで本当にやりたいことは、構文を組み合わせることです

INSERT INTO scores VALUES
and INSERT INTO scores SELECT...

モンスターのようなものに

INSERT INTO scores(score,difficulty,playerid)
   VALUES(TheScoreThatImProviding,TheDifficultyThatImProviding, (SELECT 
       id FROM player WHERE uniqueDeviceId = TheUniqueIdThatImProviding)
     )

それが理にかなっている場合。 playerId(3番目の「値」)を検索し、その選択の結果と提供されたVALUESの入力を混合します。

これは可能ですか?見つかったすべてのグーグル結果は、すべてがVALUESまたはすべてがSELECTのいずれかです。

26
Eric

意味があり、 INSERT SELECT と呼ばれます。これは、uniqueDeviceId 123、スコア5、難易度「簡単」のクエリ例です。

INSERT INTO scores (score, difficulty, playerid)
  SELECT 5, 'easy', id
  FROM player WHERE uniqueDeviceId = 123;
47
Alp

このページ によると、あなたはもうすぐです。しかし、すべての値を選択に入れてください。何かのようなもの:

insert into scores (score, difficulty, playerid )
    select TheScoreThatImProviding, TheDifficultyThatImProviding, player.id 
      from player where uniqueDeviceId = TheUniqueIdThatImProviding
4
Marvo

このアプローチについて:

INSERT INTO `tableA` SET 
           columnA =  (SELECT `columnY` FROM `tableY` WHERE `id` = 2), 
           columnB =  (SELECT `columnZ` FROM `tableB` WHERE `id` = 3);

まだベンチマークしていません。ただし、複数のSELECTステートメントを使用すると、データベースサーバーに負荷がかかります。このアプローチのプラス面は、読みやすさです。

1
Julian