У меня есть 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
проблема: каждая запись TargetTable
в TargetTable
.
EDIT: btw, a
в WHERE ColumnB = 'a';
является динамическим. Он изменяется в зависимости от взаимодействия пользователя.
Этот сценарий часто можно избежать, разбив столбцы B и C в родительскую таблицу с помощью уникального ключа в столбцах B и C. Затем используйте столбец внешнего ключа в SourceTable для ссылки на родительскую таблицу.
Что касается вашего оператора INSERT, то столбец B и C будут ссылками на родительскую таблицу, где она гарантирует, что вы будете иметь уникальное значение столбца B и C, тем самым избегая дублирования ошибки ввода.
См. Https://en.wikipedia.org/wiki/Database_normalization в отношении сокращения избыточности данных, например дублированных значений столбца B и C (a, apple) в SourceTable.
Вы можете использовать SELECT DISTINCT
INSERT INTO TargetTable
SELECT 'Bob', ColumnB, ColumnC, now(), ... FROM (SELECT DISTINCT ColumnB,
ColumnC from SourceTable) derived_table
WHERE ColumnB = 'a';