我有以下SQL语句
INSERT INTO combats (combat_killer, combat_victim, combat_weapon, combat_time, combat_server)
VALUES(
(SELECT player_id FROM players WHERE player_username = 'Kvazos'),
(SELECT player_id FROM players WHERE player_username = 'paulaagee'),
'Diamond Sword',
CURRENT_TIMESTAMP,
1
);
它基本上会获取另外两个记录的ID并将它们插入表中。但是,可能存在发送的player_username不存在且SELECT将返回NULL的情况。 如果两个SELECT中的一个返回NULL,如何阻止执行此INSERT?
答案 0 :(得分:1)
我相信这就是你想要的
INSERT INTO combats (combat_killer, combat_victim, combat_weapon, combat_time, combat_server)
SELECT a.player_id, b.player_id, 'Diamond Sword', CURRENT_TIMESTAMP, 1
FROM (SELECT player_id from players where player_username = 'Kvazos') a
JOIN (SELECT player_id from players where player_username = 'paulaagee') b
WHERE a.player_id is not null
AND b.player_id is not null;
修改:在1
CURRENT_TIMESTAMP
答案 1 :(得分:0)
您可以更简单地将此查询表达为:
INSERT INTO combats(combat_killer, combat_victim, combat_weapon, combat_time, combat_server)
SELECT a.player_id, b.player_id, 'Diamond Sword', CURRENT_TIMESTAMP, 1
FROM (SELECT player_id from players where player_username = 'Kvazos') a CROSS JOIN
(SELECT player_id from players where player_username = 'paulaagee') b;
既不需要where
也不需要on
条款。如果任一查询没有匹配项,则不返回任何行。