如果不存在则插入其他只需在mysql中选择

Zit*_*rax 6 mysql

我有一个mysql表'alfa',它将在一列中包含另一个表'beta'的主键.但如果找不到'beta'中的条目,我想在'beta'中插入值并在'alfa'中使用新密钥.我能以某种方式在一个查询中执行此操作吗?

我目前有:

INSERT INTO alfa SET c1=(SELECT id FROM beta WHERE name = 'john');
Run Code Online (Sandbox Code Playgroud)

当'john'存在于表中时工作正常,但否则失败.那么我可以改进它以便插入新名称并选择它是否已经存在?id是auto_incremented.

我试图查看IF,但还没有找到如何在SELECT之外使用IF,这可能吗?

我知道我可以在几个查询中执行此操作,但我正在与远程数据库进行通信,因此可以一次性完成所有操作.

例如,可以像这样创建表:

CREATE TABLE alfa (
  c1 int,
  PRIMARY KEY (c1)
)

CREATE TABLE beta (
  id int auto_increment,
  name varchar(255),
  PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)

所以alfa.c1应该引用beta.id值.

总之,我想做:

将beta表中的john的id插入alfa中的c1,如果john在beta中不存在,则将john插入beta并将john的新自动递增id插入alfa中的c1.

Bry*_*yan 3

我会尝试一下,但请记住,我来自 Microsoft SQL 背景,并且我不熟悉表的确切结构,因此某些 SQL 可能有点不稳定。

IF (SELECT COUNT(*) FROM beta WHERE name = 'John' > 0)
  UPDATE alfa SET c1=(SELECT id FROM beta WHERE name = 'John')
ELSE
BEGIN
  INSERT INTO beta (name) VALUES ('John')
  INSERT INTO alfa (c1) VALUES (LAST_INSERT_ID())
END
Run Code Online (Sandbox Code Playgroud)

希望这个对你有帮助。