Оператор INSERT не поддерживает предложение WHERE.Запустите это.
create table test (
n integer primary key
);
insert into test values (1);
insert into test values (2) where true;
Это приведет к синтаксической ошибке из-за предложения WHERE.
Операторы SELECT могут иметь предложение WHERE.Это вставит 2 в тестовую таблицу один раз.Запустите его столько раз, сколько хотите;это не вызовет ошибки.(Но он вставит не более одной строки.)
insert into test (n)
select 2 where 2 not in (select n from test where n = 2);
Таким образом, ваш запрос, предполагающий, что вы пытаетесь избежать появления ошибки на дублирующем ключе, должен выглядеть примерно так.
INSERT INTO users (uid)
SELECT 123 WHERE 123 not in (SELECT uid FROM users WHERE uid = 123) ;