【问题标题】:MySQL - Combining INSERT, VALUES, and SELECT?MySQL - 结合 INSERT、VALUES 和 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。

【问题讨论】:

    标签: php android mysql


    【解决方案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 语句会给数据库服务器带来负担。这种方法的优点是可读性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 2015-09-20
        • 2016-07-02
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多