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

时间:2010-02-16 18:35:02

标签: mysql

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

我目前有:

INSERT INTO alfa SET c1=(SELECT id FROM beta WHERE name = 'john');

当表中存在'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)
)

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

简而言之,我想这样做:

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

1 个答案:

答案 0 :(得分: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

希望这有一些帮助。