#sql #postgresql #sql-insert #postgresql-9.1
#sql #postgresql #sql-вставка #postgresql-9.1
Вопрос:
Я использую postgres db, я пытаюсь выполнить ниже SQL для вставки в таблицу, где ее нет
Я хочу вставить данные в таблицу, прежде чем я хочу проверить, существует ли она или нет, если она существует, тогда не вставляйте иначе.
Я хочу, чтобы мой запрос был упрощен, поскольку я буду использовать его в своем коде python с библиотекой pycopg2
INSERT INTO T1 (a1, a2, a3, a4)
VALUES (123, '20e16411-b8f7', 4, (SELECT u1 from T2 where u2 = 'test@test.com'))
WHERE NOT EXISTS (SELECT a3
FROM TI
WHERE a1 =123
AND a2 = '20e16411-b8f7'
AND a3 = 4
AND a4 = (SELECT u1 from T2 where u2 = 'test@test.com'))
SQL Error [42601]: ERROR: syntax error at or near "WHERE" Position: 236
У меня возникает проблема с синтаксисом where, однако я не уверен, что это правильный запрос для достижения моей логики, если он не исправит мой запрос
If not exist (select * from t1 where <check>)
Begin
Insert
End
Комментарии:
1. помогите нам помочь вам — поделитесь получаемой ошибкой
2. Я обновил вопрос с ошибкой
Ответ №1:
Я думаю, вы хотите insert ... select
:
insert into t1 (a1, a2, a3, a4)
select 123, '20e16411-b8f7', 4, u1
from t2
where
u2 = 'test@test.com'
and exists (
select a3
from t1
where
t1.a1 = 123
and t1.a2 = '20e16411-b8f7'
and t1.a3 = 4
and t1.a4 = t2.u1
)
Комментарии:
1. Я отредактировал свой вопрос с лучшим разъяснением
2. @user9185088: Я думаю, что этот запрос выполняет то, что вы хотите.
3. Нет, у меня это не сработало, как будто сначала нужно проверить, существуют ли данные, если нет, то вставить
4. Я обновил запрос if not sample, чего я хочу достичь
5. Я думаю, вам нужно изменить И СУЩЕСТВУЕТ, и НЕ СУЩЕСТВУЕТ.
Ответ №2:
Пусть база данных проверяет уникальность. Определите уникальное ограничение для интересующих вас столбцов:
create unique index unq_t1_a1_a2_a3_a4 on t1(a1, a2, a3, a4);
Затем используйте on conflict
:
insert into T1 (a1, a2, a3, a4)
select 123, '20e16411-b8f7', 4, t2.u1
from T2
where t2.u2 = 'test@test.com'
on conflict (a1, a2, a3, a4) do nothing;
Комментарии:
1. У меня нет доступа к созданию или изменению таблицы
2. @user9185088 … Если эти столбцы должны быть уникальными, вам следует запросить изменение данных для поддержки этого.
Ответ №3:
Вы не можете использовать WHERE после ЗНАЧЕНИЙ, поэтому он выдает ошибку, в этом запросе вы должны использовать SELECT вместо ЗНАЧЕНИЙ, что-то вроде этого;
INSERT INTO T1 (a1, a2, a3, a4)
SELECT 123, '20e16411-b8f7', 4, (SELECT u1 from T2 where u2 = 'test@test.com')
WHERE NOT EXISTS (SELECT a3
FROM TI
WHERE a1 =123
AND a2 = '20e16411-b8f7'
AND a3 = 4
AND a4 = (SELECT u1 from T2 where u2 = 'test@test.com'))