我得到了两个表,我加入了查询. 连接的表有两列,我需要它们作为查询输出中的单独行;必须省略重复项.
到目前为止,我明白了.
如果联接表的第二列中有一列为空,则也必须省略该行. 我不能满足这个要求.
create table article (id integer, artnum varchar(100), artname varchar(100), PRIMARY KEY (artnum));
insert into article (id, artnum, artname) values (1, '100', 'apple');
insert into article (id, artnum, artname) values (2, '101', 'banana');
insert into article (id, artnum, artname) values (3, '102', 'clementine');
insert into article (id, artnum, artname) values (4, '103', 'dragon fruit');
--
create table supplier (id integer, supartnum varchar(100), supplier1 varchar(100), supplier1name varchar(100), supplier2 varchar(100), supplier2name varchar(100), PRIMARY KEY (supartnum));
insert into supplier (id, supartnum, supplier1, supplier1name, supplier2, supplier2name) values (1, '100', '23', 'DZ', '42', 'VZ');
insert into supplier (id, supartnum, supplier1, supplier1name, supplier2, supplier2name) values (2, '101', '42', 'ZV', '23', 'DZ');
insert into supplier (id, supartnum, supplier1, supplier1name, supplier2, supplier2name) values (3, '102', '23', 'DZ', '', '');
insert into supplier (id, supartnum, supplier1, supplier1name, supplier2, supplier2name) values (4, '103', '23', 'DZ', '23', 'DZ');
select artnum, artname, --supplier1name, supplier2name,
(unnest(ARRAY(SELECT DISTINCT e FROM unnest(ARRAY[supplier1name,supplier2name]) AS a(e)))) as "suppliercombo"
from article
join supplier on artnum = supartnum
;
结果:
| artnum | artname | suppliercombo |
| ------ | ------------ | ------------- |
| 100 | apple | VZ |
| 100 | apple | DZ |
| 101 | banana | ZV |
| 101 | banana | DZ |
| 102 | clementine | |
| 102 | clementine | DZ |
| 103 | dragon fruit | DZ |
首次出现的102号中庭(克莱门汀)与空的供应商组合帽子被省略. 我try 使用UNION,但都失败了,因为它已经是一个300行的SQL,它将被复制.
例子也在DB Fiddle上