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