我正在尝试提出一个 MySQL 查询,它将在一个表中插入数据以及来自其他表的数据。
这是我的结构:
表1:
ID killerid playerid weapon
表2:
ID playername
现在我想将 where 子句中两个名称的 ID 插入到
table1
和 killerid
列中的 playerid
中。
但这行不通:
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,但插入时我只有 2 个名字(example1 和 example2)。
所以我必须在我的表中获取这两个名字的 ID
USERS
。
喜欢(伪例子):
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
我希望这是清楚的。
根据您获得的数据,您似乎可以按如下方式完成部分工作:
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';
分享并享受。
你的sql说:
您需要在varo_lastkills表中有一些值,例如varo_users表,如果您没有一致的值,则查询不会运行