Oracle查询结果重复问题

2个表连接后查询结果有重复数据怎么解决
强调:是结果里面有重复数据,不是表里
这是两个表连接后的表图片说明
运行如下代码
select y.bn as 艺术类,s.bn as 生活类
from ys y inner join sh s
on y.bw='张三' and s.bw='张三';
但是结果是
图片说明
有两个纺织,我只想要1个,怎么破

是结果显示设置的问题吗,我试了是查询其他数据,感觉是像为了对其其他数据所以才重复的~
也可能是我的错觉

SELECT DISTINCT
y.bn as 艺术类,s.bn as 生活类
FROM
ys y inner join sh s on y.bw='张三' and s.bw='张三';

这是因为你用的是inner join,只要满足条件的行都会显示,你可以试试把inner join 换成left join试试。我也好久没写sql语句了,有点忘了

select y.bn as 艺术类,s.bn as 生活类
from ys y inner join sh s
on y.bw= s.bw where y.bw='张三' ;
试试这个

distinct去重

加关键字distinct

SELECT DISTINCT

你这个是要把钢琴和舞蹈拼成一个值吧,然后用逗号隔开,这样纺织就是一个值了

orcal 加 DISTINCT去除重复数据。如果是两个表关联查询有重复的,用uion

oracle 11g 版本后 使用listagg 11g版本前使用 connect by 将 前面的两个用 特定符号拼接起来,

如:钢琴,舞蹈 纺织

--y表和s表需要有关联关系才会认定为是同一笔
select y.bn as 艺术类,s.bn as 生活类
from ys y inner join sh s
on y.bw=s.bw where s.bw='张三';

楼主如果想以两列的形式显示,生活类的肯定会两行,因为 y表是两行,通过bw字段关联,会分别将 钢琴行和舞蹈行和 s表的 纺织行相关联,因为都叫张三,
还需要将一个条件,才能确定单独行,比如
select y.bn as 艺术类,case when y.bn='钢琴' then (select s.bn from s where s.bw =y.bw ) else '' end as 生活类
from ys y

where y.bw='张三' ;