Я знаю два способа вставки без дублирования. Первый использует предложение WHERE NOT EXISTS
:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
WHERE NOT EXISTS (
SELECT * FROM table_name AS T
WHERE T.col1 = %s
AND T.col2 = %s)
другой делает LEFT JOIN
:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
FROM ( SELECT %s, %s, %s ) A
LEFT JOIN table_name B
ON B.COL1 = %s
AND B.COL2 = %s
WHERE B.id IS NULL
LIMIT 1
Существует ли общее правило, согласно которому одно должно быть быстрее другого, или это зависит от таблиц? Есть ли другой способ, который лучше, чем оба?