mysql:如何从一个表中获得一个值,这个表有一个重复的值条目?

disho6za  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我有一个sourcetable,比如:

ColumnA   ColumnB   ColumnC   ...
1         a         apple
2         b         ball
3         c         car
4         a         apple
5         p         pizza
``` `ColumnB` 以及 `ColumnC` 具有重复的值。
我的代码是:

INSERT INTO TargetTable
SELECT 'Bob', ColumnB, ColumnC, now(), ... FROM SourceTable
WHERE ColumnB = 'a';

我只需要在中输入一个值 `TargetTable` . 结果应该类似于:

Bob a apple currentTime ...

我遇到的问题是每个重复的条目都被输入到 `TargetTable` .
编辑:顺便说一句, `a` 在 `WHERE ColumnB = 'a';` 是动态的。它根据用户交互而改变。
osh3o9ms

osh3o9ms1#

基于理论的回答,不知道驱动db设计的用例

这种情况通常是通过将b列和c列分离到父表中,并在b列和c列上使用唯一键来避免的。然后,使用sourcetable中的外键列引用父表。
对于insert语句,b列和c列将是对父表的引用,在父表中保证有唯一的b列和c列值,从而避免重复条目错误。
看到了吗https://en.wikipedia.org/wiki/database_normalization 关于减少数据冗余,例如sourcetable中的重复列b和c(a,apple)值。

但如果db重新设计不是出于某种原因的选择。。。

您可以使用select distinct

INSERT INTO TargetTable
SELECT 'Bob', ColumnB, ColumnC, now(), ... FROM (SELECT DISTINCT ColumnB, 
ColumnC from SourceTable) derived_table
WHERE ColumnB = 'a';

相关问题