首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL -从表A获取不同的值,并在表B上转换为主键

MySQL -从表A获取不同的值,并在表B上转换为主键
EN

Stack Overflow用户
提问于 2013-06-27 16:17:45
回答 2查看 1.1K关注 0票数 0

基本上试着用另一个表中的产品代码填充一个表。代码可以在ProductDescriptions.的Products表中重复,因为它有关于产品大小的数据,但是这个值需要是惟一的

每次在ProductDescriptions产品表中有一个新的不同的产品代码时,我都需要有一个新的条目进入表。

我尝试过各种各样的事情,但没有成功,似乎没有那么复杂,但它令我困惑。

我试过这样做:

代码语言:javascript
运行
复制
INSERT INTO ProductDescriptionsbackup(ProductID) SELECT DISTINCT `PRODUCT CODE` FROM Products

但是,它不能运行,因为它不能只接受不同的值,而且从长远来看,它不会自动更新,不过这将是次要的问题。

主要问题是将不同的值输入到ProductDescriptions表中。

我环顾四周寻找答案,但没有什么能让我觉得有意义的。提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-27 16:25:30

如果您只是尝试插入新的值,这应该是可行的。您可以对目标表进行左联接,并且只包含不存在的记录(WHERE pbu.ProductID IS NULL)。

代码语言:javascript
运行
复制
INSERT INTO ProductDescriptionsbackup(ProductID) 
SELECT DISTINCT p.`PRODUCT CODE` 
FROM   Products as p
       LEFT JOIN ProductDescriptionsbackup as pbu
       ON p.`PRODUCT CODE` = pbu.ProductID
WHERE  pbu.ProductID IS NULL;
票数 1
EN

Stack Overflow用户

发布于 2013-06-27 16:32:54

让我们打断你的问题有两部分。首先是在产品中插入新行时总是更新ProductDescriptions,其次是如何插入新值。

对于第一部分,有两个选项,在代码中,您负责每次在产品表中执行插入操作时,在任何地方显式插入产品描述,或者可以通过插入后创建触发器进行插入。

代码语言:javascript
运行
复制
create trigger ai_eav
after insert on eav
for each row
(...)

我推荐第二个选项,这样您就不会忘记插入,但是有些人不喜欢触发器,因为它们对程序员来说是“不可见的”,因为它们通常会被遗忘。

对于第二部分,如果不存在,则可以执行插入操作,这可以通过使用左联接进行插入来实现。

代码语言:javascript
运行
复制
insert into ProductDescriptions(ProductID)
select distinct p.`PRODUCT CODE` 
from Products 
left join join ProductDescriptions on `PRODUCT CODE` = ProductID
where ProductID is null

如果选择触发器,甚至可以利用伪行的新特性,使插入速度更快,因为您将使用单个行,而不是使用整个products表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17348249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档