MySQL:如何从具有该值的重复条目的表中获取值?

时间:2018-05-30 22:23:48

标签: mysql

我有一个SourceTable:

ColumnA   ColumnB   ColumnC   ...
1         a         apple
2         b         ball
3         c         car
4         a         apple
5         p         pizza

ColumnBColumnC有重复值。

我的代码是:

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

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

Bob   a   apple   currentTime   ...

我遇到的问题是在TargetTable中输入了每个重复的条目。

编辑:顺便说一下,a中的WHERE ColumnB = 'a';是动态的。它会根据用户交互而变化。

1 个答案:

答案 0 :(得分:0)

基于理论的答案,不知道推动数据库设计的用例

通常可以通过将列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';