【问题标题】:SQL INSERT INTO with JOINSQL INSERT INTO 与 JOIN
【发布时间】:2014-12-20 21:58:40
【问题描述】:

我正在尝试提出一个 MySQL 查询,该查询将在一个表中插入数据以及来自另一个表的数据。

这是我的结构:

表1:

IDkilleridplayeridweapon

表2:

IDplayername

现在我想在 killeridplayerid 列的 table1 中插入 where 子句中两个名称的 ID。

但它不会工作..

INSERT INTO table1 (killerid)
SELECT
    t1.id
FROM
    table1 t1
LEFT JOIN
    table2 t2 ON (t2.killerid = t1.id)
WHERE t2.playername = 'example'

更好理解:

我希望这更容易理解:

还有我的桌子USERS

ID   |   playername [...]
-----|-------------------
1    |   example1
2    |   example2

还有我的桌子KILLS

ID   |  killerid  |  victimid  |  weapon
-----|----------------------------------
 1   |    1       |     2      |   FIST
 2   |    2       |     1      |   PISTOL

我想在KILLERS 中插入杀手 (killerid) 和受害者 (victimid) 的 ID,但我在插入时只有两个名称(example1 和 example2)。

所以我必须在我的表 USERS 中获取这两个名称的 ID。

喜欢(伪示例):

INSERT INTO `KILLERS`(`killerid`, `victimid`, `weapon`)
VALUES(
  USERS.ID WHERE USERS.playername = 'example1',
  USERS.ID WHERE USERS.playername = 'example2',
  'FIST'
 );

应该插入以下内容:

ID   |  killerid  |  victimid  |  weapon
-----|----------------------------------
 1   |    1       |     2      |   FIST

我希望这很清楚。

【问题讨论】:

  • 什么错误?????????????
  • 没有错误,它只插入了killderid,我不知道如何插入killderid,playerid和武器。但是当我在 table2 中有 4 行时它插入 8 行,当我有 8 行时它插入 16 等等..
  • 你为什么在你的问题中使用 Table1 和 Table2 而你的示例使用了 diff...你是否打算让这个问题过于难以解决?
  • 对不起,我完全忘记了。变了。
  • 您正在插入killeridplayeridweapon 应该来自哪里?执行 INSERT 时,您应该提供所有列或稍后您需要返回并 UPDATE 您之前插入的行,我怀疑这不是您想要做的。所以我们回到“playeridweapon 来自哪里?”。

标签: mysql join insert left-join


【解决方案1】:

鉴于您获得的数据,您似乎可以通过以下方式获得部分数据:

INSERT INTO table2(killerid, playerid, weapon)
  SELECT t1.id as killerid,  -- the 'as killerid' is not required but is useful 
         t1.playerid,        -- to help understand what's intended
         t1.weapon
    FROM table1 t1
    LEFT OUTER JOIN table2 t2
      ON t2.killerid = t1.id
    WHERE t2.playername = 'example'

编辑

现在我们已经有了一个表结构,解决方案就更容易弄清楚了。

INSERT INTO kills (killerid, victimid, weapon)
  SELECT u1.ID as killerid,
             u2.ID as victimid,
             d.weapon
    FROM USERS u1
    INNER JOIN USERS u2
      ON 1 = 1
    INNER JOIN (SELECT 'FIST' as weapon
                  FROM DUAL) d
      ON 1 = 1
    WHERE u1.playername = 'example1' AND
          u2.playername = 'example2';

SQLFiddle here

分享和享受。

【讨论】:

  • 谢谢! playeridtable1 中。我也需要插入 playerid
  • 现在看看。希望这会让你得到你需要的东西。祝你好运。
  • 我刚回去看了你的问题,你说你想插入到table1(killerid, playerid),但是你的SQL读到“INSERT INTO table2”。那么你想插入哪个表???
  • 我的table1 中有一个ID、一个killerid 和一个playerid 和一个weapon。在table2 我有一个ID,一个playername。现在我正在尝试插入我的table1。假设table2 是以下行:ID 是 1,playername 是示例。我想插入table1。例如,一个玩家 (playerid) 被另一个玩家 (killerid) 用武器 (weapon) 杀死。我需要加入来获取玩家和杀手的 ID。是不是更好理解?
  • 我在第一篇文章中添加了一个更好的例子。
【解决方案2】:

你的 sql 说:

你需要在 varo_lastkills 表中有一些值,比如 varo_users 表,如果你没有一致的值,你的查询就不会运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多