Давайте рассмотрим, что у меня есть таблица A, которую я использую для создания таблицы B. У меня нет первичного ключа или уникального ключа, который я мог бы использовать для ON DUPLICATE KEY
.SQL INSERT без дубликата (нет первичных или уникальных ключей)
Моя таблица B имеет 3 колонки: A, B и C.
Я хочу INSERT
этого только если строка уже не существует. Я могу определить, существует ли строка в комбинации A и B. Для этого я использую оператор WHERE NOT EXISTS
.
INSERT INTO TableB
(A, B, C)
SELECT
SUM(A),
SUM(B),
SUM(C)
FROM TableA
WHERE NOT EXISTS (SELECT * FROM TABLE B WHERE A=A AND B=B)
GROUP BY A, B
Если в таблице B пусто, то строка вставляется. Однако, как только таблица B имеет запись, ни одна строка не вставлена, даже если они уже не существуют в таблице B.
Почему бы не использовать 'UNIQUE (A, B, C)'? – Fozi
@Fozi Потому что А можно повторить. B также можно повторить, но это единственная комбинация из двух уникальных. Это характер данных, с которыми я работаю. – Wistar
Ant это именно то, что «UNIQUE (A, B, C)» сделает для вас; Это не то же самое, что «УНИКАЛЬНЫЙ (A) УНИКАЛЬНЫЙ (B) УНИКАЛЬНЫЙ (C)». – Fozi