2011-05-23 56 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語句會給數據庫服務器造成負擔。這種方法的好處是可讀性。