gpt4 book ai didi

mysql基于另一个表更新和插入语句

转载 作者:行者123 更新时间:2023-11-29 08:03:34 25 4
gpt4 key购买 nike

我需要一些有关 mysql 语句的帮助,以便根据另一个表的内容在新表中插入和更新行。我将在自动化 Perl 代码中使用它,但 mysql 语句本身就是我遇到的问题。

我的第一个名为 PROFILE 的表看起来像这样:

+----------+---------------------------+
| ID | NAME |
+----------+---------------------------+
| 0 | Default profile |
| 04731470 | Development profile |
| 87645420 | Core Base |
| a41401a0 | Core Test |
| ba0e3000 | Development profile child |
| e37fe780 | Test2 |
+----------+---------------------------+

第二个名为 DEPLOYMENT 具有以下列(还没有行):

+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| PROF_ID | char(36) | NO | PRI | NULL | |
| NAME | varchar(60) | NO | | NULL | |
| ID | tinyint(4) | NO | MUL | NULL | |
+------------+-------------+------+-----+---------+-------+

ID.PROFILEPROF_ID.DEPLOYMENT 的外键,我希望 ID.PROFILE 的所有值都放入 PROF_ID.DEPLOYMENT。然后,我希望根据 NAME.PROFILE 字段中找到的单词设置 NAME.DEPLOYMENTID.DEPLOYMENT 字段。

下面显示了我想要执行的插入语句,但由于“错误 1242 (21000):子查询返回超过 1 行”而失败:

INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID) VALUES((select ID from PROFILE where NAME like '%core%'),'Core','2');
INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID) VALUES((select ID from PROFILE where NAME like '%development%'),'Dev','3');
INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID) VALUES((select ID from PROFILE where NAME not like '%development%' and not like '%core%'),'Default','1');

我不确定从哪里开始更新部分,但如果NAME.PROFILE 字段会随着上述任何单词的变化而变化。

这是我正在寻找的DEVELOPMENT表。

+----------+---------------+----+
| PROF_ID | NAME | ID |
+----------+---------------+----+
| 0 | Default | 1 |
| 04731470 | Dev | 3 |
| 87645420 | Core | 2 |
| a41401a0 | Core | 2 |
| ba0e3000 | Dev | 3 |
| e37fe780 | Default | 1 |
+----------+---------------+----+

然后,如果任何 NAME.PROFILE 信息发生更改,我希望更新语句。

抱歉,如果这令人困惑,我不知道如何解释,而且我仍在学习 mysql。如有任何帮助,我们将不胜感激。

最佳答案

只需去掉 values 关键字,基本上:

INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID)
select ID, 'Core','2'
from PROFILE
where NAME like '%core%';

INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID)
select ID, 'Dev', '3'
from PROFILE
where NAME like '%development%';

INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID)
select ID, 'Default', '1'
from PROFILE
where NAME not like '%development%' and not like '%core%';

顺便说一句,您可以使用条件表达式将它们组合成一个语句:

INSERT INTO DEPLOYMENT(PROF_ID,NAME,ID)
select ID,
(case when NAME like '%core%' then 'Core'
when NAME like '%development%' then 'Dev'
else 'Default'
end)
(case when NAME like '%core%' then '2'
when NAME like '%development%' then '3'
else '1'
end)
from PROFILE;

关于mysql基于另一个表更新和插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com