2011-05-23 81 views
24

我对SQL很陌生,而且我真的只与它交互足以让高分数据库工作。我正在使用php脚本来访问我的在线MySQL数据库。无论如何。MySQL - 结合INSERT,VALUES和SELECT?

我所拥有的是2张牌桌,球员和得分。玩家有一个id,uniqueDeviceId和选择的名字。 得分有你期望的平常事情。

我很想在一个单一的查询做(以降低复杂性......)是对语法成某种怪物的结合的

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的输入混合。

这可能吗?所有Google搜索结果都找到了VALUES或全部SELECT。

回答

46

有意义,被称为INSERT SELECT。这是uniqueDeviceId 123为例查询,分数5和难度“易”:

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

所以我只能说在SELECT部分​​硬编码的值,它不会寻找一个名称,当它搜索播放器表的列? – Eric 2011-05-23 00:23:31

+0

直接传递数字而不查找列。字符串也。 – Alp 2011-05-23 00:27:14

+0

非常好。非常感谢你。我只是测试了这个语法,它确实有效。 – Eric 2011-05-23 00:28:20

4

根据this page你靠近。但把所有的价值都纳入你的选择。喜欢的东西:

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

怎么样这种方法:

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

我没有基准它。但是使用多个SELECT语句会给数据库服务器造成负担。这种方法的好处是可读性。