我想table1從table2. 問題是我有一個同名的欄位,table2并且table1如果該欄位中已經有一條具有相同值的記錄,我不想插入資料。現在我有這樣的事情:
insert into table1 (id, sameField, constantField, superFied)
select gen_random_uuid(), "sameField", 'constant', "anotherField"
from table2;
我認為我需要做這樣的事情:
insert into table1 (id, sameField, constantField, superFied)
select gen_random_uuid(), "sameField", 'constant', "anotherField"
from table2
where not exists ... ?
我需要寫什么而不是?如果我想要這個邏輯:在選擇from時檢查 insameField中是否已經有相同的值?DBMS 是 Postgres。table1sameFieldtable2
uj5u.com熱心網友回復:
您可以使用子查詢來查看記錄是否存在。您將需要定義應該是唯一的列。
create table table2( id varchar(100), sameField varchar(25), constant varchar(25), superField varchar(25) ); insert into table2 values (gen_random_uuid(),'same1','constant1','super1'), (gen_random_uuid(),'same2','constant2','super2')?
2 行受影響
create table table1( id varchar(100), sameField varchar(25), constant varchar(25), superField varchar(25) ); insert into table1 values (gen_random_uuid(),'same1','constant1','super1');?
1 行受影響
insert into table1 (id, sameField, constant, superField) select uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), t2.sameField, 'constant', t2.superField from table2 t2 where sameField not in (select sameField from table1)
1 行受影響
select * from table1; select * from table2;編號 | 同場 | 常數 | 超場 :------------------------------------------------ | :-------- | :-------- | :--------- 4cf10b1c-7a3f-4323-9a16-cce681fcd6d8 | 相同1 | 常數1 | 超級1 d8cf27a0-3f55-da50-c274-c4a76c697b84 | 相同2 | 常數 | 超級2 編號 | 同場 | 常數 | 超場 :------------------------------------------------ | :-------- | :-------- | :--------- c8a83804-9f0b-4d97-8049-51c2c8c54665 | 相同1 | 常數1 | 超級1 3a9cf8b5-8488-4278-a06a-fd75fa74e206 | 相同2 | 常數2 | 超級2
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/465858.html
標籤:PostgreSQL 液基 liquibase-sql
上一篇:SELECT/DELETE并發場景-Postgres
下一篇:選擇列具有相等值的行的磁區
