由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 求助SQL高手,这个join怎么做比较好
相关主题
keep group of values of SQL procedure in one table急问一个关于T-SQL的问题,谢谢
generate unique integer ID from columns in SQL table (转载新手请教:无数据库,有数据,需要SQL 做表join
SQL问题求救!!mySQL 问题 (转载)
请教一个SQL问题1. Oracle vs. SQL92 Re: Just
SQL问题请教: add one more columnSQL Server Trigger on System Base Table or Catalog View
有趣的Join问题,源于SQL和SAS比较。这个 query 为什么可以 update multiple rows
aks a simple SQL question奇怪的 SQL 问题
请教:SQL面试题。SQL Server 中如何设置Unique字段.
相关话题的讨论汇总
话题: value3话题: value2话题: value1话题: 字段话题: int
进入Database版参与讨论
1 (共1页)
z********4
发帖数: 1668
1
有48张表,每个表有一个id字段(建立了unique idex),一个value字段:
表1的字段:id, value1
表2的字段:id, value2
表3的字段,id, value3
……
表48的字段:id, value48
现在希望把这48张表根据id字段合并为一张,结构为:
id, value1, value2, value3,...,value48
问题是,每个表记录的id并不完全一样,表1中有的id表2中可能没有,反之亦然。但是
要求保留所有在48张表中出现过的id。如果这个id在表x中不存在,那么合并后的总表
中,这个id的valuex字段赋一个-1值。
例如,总表可能是这样的:
id, value1, value2, value3,...,value48
a, 1, 2, 3, ..., -1
b, 2, -1, 3, .... 3
...
另外一个问题是,每个表都非常大,记录数量在1200w左右。
数据库为postgresql,求好的解决方案。感谢!
i*******d
发帖数: 81
2
CTE + 一串 left outer join 可以实现。
SQL Server 三个table:
create table t1( id int, value1 int);
create table t2( id int, value2 int);
create table t3( id int, value3 int);
insert into t1 values (2,2),(3,3);
insert into t2 values (1,1),(3,3);
insert into t3 values (1,1),(2,2);
with idtable as
(select id from (select id from t1 union select id from t2 union
select id from t3) as t)
select idtable.id,isnull(value1,-1) as value1, isnull(value2,-1) as value2,
isnull(value3,-1) as value3
from idtable left outer join t1 on idtable.id = t1.id left outer join t2 on
idtable.id=t2.id left outer join t3 on idtable.id=t3.id;
Result:
id value1 value2 value3
1 -1 1 1
2 2 -1 2
3 3 3 -1

【在 z********4 的大作中提到】
: 有48张表,每个表有一个id字段(建立了unique idex),一个value字段:
: 表1的字段:id, value1
: 表2的字段:id, value2
: 表3的字段,id, value3
: ……
: 表48的字段:id, value48
: 现在希望把这48张表根据id字段合并为一张,结构为:
: id, value1, value2, value3,...,value48
: 问题是,每个表记录的id并不完全一样,表1中有的id表2中可能没有,反之亦然。但是
: 要求保留所有在48张表中出现过的id。如果这个id在表x中不存在,那么合并后的总表

i*******d
发帖数: 81
3
其实就两个column的表,12 million也不算大。最后的表不小。一下update 48 个
column可能要写挺长时间。
你可以先把最后表的结构create出来,先写进去所有的unique id,create index。然
后每次update一个column。
create table t1( id int, value1 int);
create table t2( id int, value2 int);
create table t3( id int, value3 int);
insert into t1 values (2,2),(3,3);
insert into t2 values (1,1),(3,3);
insert into t3 values (1,1),(2,2);
select id into final from (select id from t1 union select id from t2 union
select id from t3) as t;
create clustered index id on final(id);
alter table final add value1 int;
update final set value1 = isnull(t1.value1,-1) from final f left outer join
t1 on f.id = t1.id;
alter table final add value2 int;
update final set value2 = isnull(t2.value2,-1) from final f left outer join
t2 on f.id = t2.id;
alter table final add value3 int;
update final set value3 = isnull(t3.value3,-1) from final f left outer join
t3 on f.id = t3.id;
select * from final;
id value1 value2 value3
1 -1 1 1
2 2 -1 2
3 3 3 -1
z********4
发帖数: 1668
4

高人……好难懂,我慢慢消化下,多谢!

【在 i*******d 的大作中提到】
: CTE + 一串 left outer join 可以实现。
: SQL Server 三个table:
: create table t1( id int, value1 int);
: create table t2( id int, value2 int);
: create table t3( id int, value3 int);
: insert into t1 values (2,2),(3,3);
: insert into t2 values (1,1),(3,3);
: insert into t3 values (1,1),(2,2);
: with idtable as
: (select id from (select id from t1 union select id from t2 union

z********4
发帖数: 1668
5

这种做法也有道理。

【在 i*******d 的大作中提到】
: 其实就两个column的表,12 million也不算大。最后的表不小。一下update 48 个
: column可能要写挺长时间。
: 你可以先把最后表的结构create出来,先写进去所有的unique id,create index。然
: 后每次update一个column。
: create table t1( id int, value1 int);
: create table t2( id int, value2 int);
: create table t3( id int, value3 int);
: insert into t1 values (2,2),(3,3);
: insert into t2 values (1,1),(3,3);
: insert into t3 values (1,1),(2,2);

s**********o
发帖数: 14359
6
找出所有的UNIQUE ID,然后UPDATE你最后的表就是了,这不是一个
很简单的UPDATE的问题吗
l*****e
发帖数: 3343
7
C#/powershell: a simple trick
1 (共1页)
进入Database版参与讨论
相关主题
SQL Server 中如何设置Unique字段.SQL问题请教: add one more column
how to write this sql statement有趣的Join问题,源于SQL和SAS比较。
其实我发现了CODE的写得好不好aks a simple SQL question
怎么reference temp table的column请教:SQL面试题。
keep group of values of SQL procedure in one table急问一个关于T-SQL的问题,谢谢
generate unique integer ID from columns in SQL table (转载新手请教:无数据库,有数据,需要SQL 做表join
SQL问题求救!!mySQL 问题 (转载)
请教一个SQL问题1. Oracle vs. SQL92 Re: Just
相关话题的讨论汇总
话题: value3话题: value2话题: value1话题: 字段话题: int