postgre简明SQL,用于在单个列上连接多个表



我有大约122个表,它们都共享一个特定的列。是否有一种优雅/简洁的方法来连接该列上的所有这些表,而不需要121个

实例join on A.id = B.id

查询中的?

如果有问题的列在两个表中具有相同的名称(它应该),那么您可以使用以下更短的语法:

SELECT ... FROM table1 JOIN table2 USING (column)

该列也将只在结果中出现一次,而不是在每个表中都出现。

您仍然需要为每个表执行此操作。

这是你的解决方案:

创建表并插入语句:

create table splitUpdate (no int,productname varchar(10),productcrossell varchar(20));
insert into splitUpdate values (1,'a','a(1)');
insert into splitUpdate values (2,null,'c(4),d(5)');
insert into splitUpdate values (3,null,'Z(1),b(2)');
create table eleminate (product varchar(20));
insert into eleminate values('x');
insert into eleminate values('y');
insert into eleminate values('Z');
insert into eleminate values('z');

更新查询:

with cte as (
select no,productname,p.product,row_number()over(partition by no)rn ,substring(p.product  from 1 for position('(' in p.product )-1) SplittedProduct
from splitupdate t, unnest(string_to_array(t.productcrossell ,','))p(product)
where substring(p.product  from 1 for position('(' in p.product )-1) not in (select product from eleminate))
update splitupdate set productname=splittedproduct 
from cte 
where splitupdate.productname is null and splitupdate.no=cte.no and cte.rn=1 

SplitUpdate Table before updating:

|no|productname|productcrossell| 
|1 |a          |a(1)           |
|2 |c          |c(4),d(5)      |
|3 |b          |Z(1),b(2)      |

结果:

|no|productname|productcrossell| 
|1 |a          |a(1)           |
|2 |c          |c(4),d(5)      |
|3 |b          |Z(1),b(2)      |

最新更新