两个SELECT返回非空值时的SQL INSERT

时间:2015-04-12 20:26:45

标签: mysql sql

我有以下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?

2 个答案:

答案 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条款。如果任一查询没有匹配项,则不返回任何行。