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='张三' ;