Вы можете попробовать что-то вроде этого
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities LEFT JOIN
(
SELECT traduction.`id`
FROM traduction
WHERE traduction.type='city'
GROUP BY id
) s ON cities.id = s.id
WHERE s.ID IS NULL
);
Также убедитесь, что у вас есть правильные индексы в ваших таблицах, скажем, traduction.type или traduction.id и towns.id
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities LEFT JOIN
(
SELECT DISTINCT
traduction.`id`
FROM traduction
WHERE traduction.type='city'
) s ON cities.id = s.id
WHERE s.ID IS NULL
);
РЕДАКТИРОВАТЬ: НЕ СУЩЕСТВУЕТ
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities
WHERE NOT EXISTS (
SELECT DISTINCT
traduction.`id`
FROM traduction
WHERE traduction.type='city'
AND cities.id = traduction.id
)
);