SQL 条件插入
SQL Conditional INSERT
我正在使用 MySQL。如何根据相关数据的验证将 INSERT 执行到 table 中?原谅人为的例子。
如果我的 table 是:
> SELECT * FROM colors;
id color owner
-- ------ -----
10 red 2
11 banana 6
12 blue 9
和
> SELECT * FROM fruit;
id color_id name
-- -------- -------
59 10 cherry
60 12 blueberry
其中 fruit.color 是 colors.id
的外键
我想插入有关香蕉的信息,但前提是颜色的所有者是 6。这是原始插入:
INSERT INTO
fruit
(color_id, name)
VALUES
(11, 'banana');
我想做类似的事情:
INSERT INTO
fruit
(color_id, name)
VALUES
(11, 'banana')
-- ??? I have no idea what to put here ???
ONLY IF (
(SELECT COUNT(*) FROM fruit
INNER JOIN colors ON fruit.color_id = colors.id
AND colors.id = 11
WHERE colors.owners = 6) >= 1
)
最后一个条款显然不是真的,但我不知道该怎么做。如果我要插入的 color_id
的 owner
列等于我提供的值,这个想法只是插入值。
帮忙?
您可以尝试这样的操作:
insert into fruit (color_id, name)
select 11, 'banana'
where (select count(*) from fruit join colors on fruit.color_id = colors.id
where colors.id = 11 and colors.owner = 6) >= 1;
或等效
insert into fruit (color_id, name)
select 11, 'banana'
where exists
(select * from fruit join colors on fruit.color_id = colors.id
where colors.id = 11 and colors.owner = 6);
这对你有用吗?
IF (SELECT COUNT(*) FROM fruit
INNER JOIN colors ON fruit.color_id = colors.id
AND colors.id = 11
WHERE colors.owners = 6) >= 1
THEN
INSERT INTO fruit
(color_id, name)
VALUES
(11, 'banana');
END IF;
我正在使用 MySQL。如何根据相关数据的验证将 INSERT 执行到 table 中?原谅人为的例子。
如果我的 table 是:
> SELECT * FROM colors;
id color owner
-- ------ -----
10 red 2
11 banana 6
12 blue 9
和
> SELECT * FROM fruit;
id color_id name
-- -------- -------
59 10 cherry
60 12 blueberry
其中 fruit.color 是 colors.id
的外键我想插入有关香蕉的信息,但前提是颜色的所有者是 6。这是原始插入:
INSERT INTO
fruit
(color_id, name)
VALUES
(11, 'banana');
我想做类似的事情:
INSERT INTO
fruit
(color_id, name)
VALUES
(11, 'banana')
-- ??? I have no idea what to put here ???
ONLY IF (
(SELECT COUNT(*) FROM fruit
INNER JOIN colors ON fruit.color_id = colors.id
AND colors.id = 11
WHERE colors.owners = 6) >= 1
)
最后一个条款显然不是真的,但我不知道该怎么做。如果我要插入的 color_id
的 owner
列等于我提供的值,这个想法只是插入值。
帮忙?
您可以尝试这样的操作:
insert into fruit (color_id, name)
select 11, 'banana'
where (select count(*) from fruit join colors on fruit.color_id = colors.id
where colors.id = 11 and colors.owner = 6) >= 1;
或等效
insert into fruit (color_id, name)
select 11, 'banana'
where exists
(select * from fruit join colors on fruit.color_id = colors.id
where colors.id = 11 and colors.owner = 6);
这对你有用吗?
IF (SELECT COUNT(*) FROM fruit
INNER JOIN colors ON fruit.color_id = colors.id
AND colors.id = 11
WHERE colors.owners = 6) >= 1
THEN
INSERT INTO fruit
(color_id, name)
VALUES
(11, 'banana');
END IF;