这条 INSERT INTO xx SELECT 的 Mysql 语句,在 VALUE 段,如何取值?

325 天前
 pppguest3962
问题一、
直接写,是这样的:
INSERT INTO record_cc (`lname`, `mhid`, `type`, `mtname`, `reson`, `UpdateTime`) VALUES ('stb', '888', 1, 'ABC', '23#30', '2023-06-27 16:10:32');"


mtname 字段如果要从其它表取值,应该如何实现呢? 
(如这个错误的语句,应该怎么修改?)
INSERT INTO record_cc (`lname`, `mhid`, `type`, `mtname`, `reson`, `UpdateTime`) VALUES ('stbl', '888', '1', 
(SELECT `AU` FROM chresult WHERE chresult.mhid = '888' LIMIT 1),
, '23#30', NOW())


问题二,是否可以在以上 INSERT 语句的基础上完成这样的拼接?
(我简化了相关字段,想看看是怎么样完成拼装的...)

INSERT INTO record_cc (`reson`) VALUES (xxx);
这个 xxx 的值,是
SELECT `AU` FROM chresult WHERE chresult.mhid = '888' LIMIT 1
+
'#'
+
SELECT `BU` FROM chresult WHERE chresult.mhid = '888' LIMIT 1
这样组装起来的,
想看看大家是怎么样做,可以避免多次查询,然后还要在本地程序运算完再写 mysql ,
现在开销太大,看看能不能一句就把数据库怼完
620 次点击
所在节点    问与答
9 条回复
jcc
325 天前
问题一,如果其他字段是固定的,你可以把它们按顺序拼接到 select 中,像这样
```sql
INSERT INTO record_cc (`lname`, `mhid`, `type`, `mtname`, `reson`, `UpdateTime`)
SELECT 'stbl', '888', '1', `AU`, '23#30', NOW()
FROM chresult
WHERE chresult.mhid = '888'
```

问题二,可以使用 concat() 函数做拼接
liprais
325 天前
建议看完文档再来问
1.就写个字面量的事
2.直接用 concat 完事
intersect
325 天前
INSERT INTO record_cc (`lname`, `mhid`, `type`, `mtname`, `reson`, `UpdateTime`)
select 'stbl', '888', '1',`AU`, concat(`AU`,'#' ,`BU`), NOW() FROM chresult WHERE chresult.mhid = '888' LIMIT 1
pppguest3962
325 天前
@liprais 也是奇怪,这个论坛是公开的,就一定是程序员来么,为什么要一个搞通信的人为了喝牛奶去研究一头奶牛的基因序列重组?谢谢。
liprais
325 天前
@pppguest3962 你搞通信的更应该明白看文档的重要性,凭啥写个 sql 就要当伸手党?
pppguest3962
325 天前
@liprais 您可以不回答的,为什么一定要按照您的标准去指示其他人?
liprais
325 天前
@pppguest3962 “这个论坛是公开的” 原样还给你
pppguest3962
325 天前
几年都不用一次 MYSQL ,就临时解决一个问题,时态催得急,就谢谢大家了,不想再怼下去
istomyang
325 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/952122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX