SQL INSERT INTO与JOIN

时间:2014-12-20 21:58:40

标签: mysql join insert left-join

我试图提出一个MySQL查询,该查询将数据插入到包含来自其他表的数据的表中。

那是我的结构:

表1:

ID killerid playerid weapon

表2:

ID playername

现在我想在collumn table1中插入killerid并在where子句中插入playerid两个名称的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,但在I&#中我只有2个名字(example1和example2) 39;插入。

所以我必须在表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

我希望这很清楚。

2 个答案:

答案 0 :(得分:0)

你的sql说:

你需要在varo_lastkills表中有一些像varo_users表这样的值,如果你没有全等值你的查询不运行

答案 1 :(得分:0)

根据您获得的数据,您可以按照以下方式获得分数:

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

分享并享受。