我有一个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。
答案 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
希望这有一些帮助。