我有一个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';
是动态的。它会根据用户交互而变化。
答案 0 :(得分:0)
通常可以通过将列B和C断开到具有列B和C上的唯一键的父表中来避免这种情况。然后,使用SourceTable中的外键列来引用父表。
对于您的INSERT语句,B列和C列将引用父表,它保证您具有唯一的B列和C列,从而避免重复输入错误。
有关减少数据冗余的信息,请参阅https://en.wikipedia.org/wiki/Database_normalization,例如SourceTable中的重复列B和C(a,apple)值。
您可以使用SELECT DISTINCT
INSERT INTO TargetTable
SELECT 'Bob', ColumnB, ColumnC, now(), ... FROM (SELECT DISTINCT ColumnB,
ColumnC from SourceTable) derived_table
WHERE ColumnB = 'a';