MySQL - 结合 INSERT、VALUES 和 SELECT?

Posted

技术标签:

【中文标题】MySQL - 结合 INSERT、VALUES 和 SELECT?【英文标题】:MySQL - Combining INSERT, VALUES, and SELECT? 【发布时间】:2011-08-30 19:21:54 【问题描述】:

我对 SQL 有点陌生,我实际上只与它进行交互以使高分数据库正常工作。我正在使用 php 脚本来访问我的在线 mysql 数据库。无论如何。

我有两张桌子,球员和得分。 Player 有一个 id、uniqueDeviceId 和 selectedname。 Score 具有您所期望的常规功能。

我真正想要在单个查询中做的(以降低复杂性...)是结合

的语法
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(第三个“值”),并将该选择的结果与提供的 VALUES 的输入混合。

这可能吗?我发现的所有谷歌搜索结果要么全部为 VALUES,要么全部为 SELECT。

【问题讨论】:

【参考方案1】:

有道理,被称为INSERT SELECT。这是 uniqueDeviceId 123、分数 5 和难度“简单”的示例查询:

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

【讨论】:

所以我只能在 SELECT 部分中说硬编码的值,它不会在搜索玩家表时寻找名为 that 的列? 数字直接传递,不找列。字符串也是。 优秀。非常感谢。我刚刚测试了该语法,它确实有效。【参考方案2】:

根据this page,您已经很接近了。但是将所有值放入您的选择中。比如:

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

【讨论】:

【参考方案3】:

这种方法怎么样:

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

我还没有对它进行基准测试。但是使用多个SELECT 语句会给数据库服务器带来负担。这种方法的优点是可读性。

【讨论】:

以上是关于MySQL - 结合 INSERT、VALUES 和 SELECT?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL insert set 和 insert values

mysql利用LAST_INSERT_ID实现id生成器

MySQL insert语句中中value和values的区别

mysql insert语句

MYSQL-INSERT 增

求一个mysql Insert事务写法