aynı sütunları ile iki tablo var ekleyin aynı sütun adları ile iki tablo birleştirme, birinci sütun adıdır ve ikinci sayısıdır. Her isim iki tablo katma sayısı ile görünecek şekilde, bu tabloları birleştirmek istiyorum: Ben bu yürütmek için oldukça çirkin bir yapı oluşturduk an itibariylesayaçları
Table1: Table2: Result Table:
NAME COUNT NAME COUNT NAME COUNT
name1 1 name3 3 name1 1
name2 2 name4 4 name2 2
name3 3 name5 5 name3 6
name4 4 name6 6 name4 8
name5 5
name6 6
ve eğer öğrenmek istiyorum sonuçları daha zarif bir şekilde almak mümkündür. Bugüne kadar ne var
(Tablo 1 test1 olduğunu ve Table2 test2 edilir):
create table test1 (name varchar(40), count integer);
create table test2 (name varchar(40), count integer);
create table test3 (name varchar(40), count integer);
create table test4 (name varchar(40), count integer);
create table test5 (name varchar(40), count integer);
insert into test4 (name, count) select * from test1;
insert into test4 (name, count) select * from test2;
insert into test3 (name , count) select t1.name, t1.count + t2.count
from test1 t1 inner join test2 t2 on t1.name = t2.name;
select merge_db(name, count) from test3;
insert into test5 (name, count) (select name, max(count) from test4 group by name);
CREATE FUNCTION merge_db(key varchar(40), data integer) RETURNS VOID AS
$$ -- souce: http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-postgresql
BEGIN
LOOP
-- first try to update the key
UPDATE test4 SET count = data WHERE name = key;
IF found THEN
RETURN;
END IF;-- not there, so try to insert the key -- if someone else inserts the same key concurrently, -- we could get a unique-key failure
BEGIN
INSERT INTO test4(name,count) VALUES (key, data);
RETURN;
EXCEPTION WHEN unique_violation THEN-- do nothing, and loop to try the UPDATE again
END;
END LOOP;
END;
$$
LANGUAGE plpgsql;
teşekkürler, sadece "X" in ne olduğunu anlamaya çalışıyorum? belgelerinde bulamıyorum. – evgeni
X bir masa takma addır (Google bunun için). Bu durumda, tablo aslında bir alt sorgudan oluşan bir tablo ifadesidir. PostgreSQL ve MySQL (en azından) alt sorguların adlandırılmasını gerektirir. Açıklama, 'select X.name, sum (X.cnt) ...' şeklinde yazılmıştır. Ancak, takma adını kullanmadığımdan, sadece bir kukla isim vereceğim. – Reece