标题:使用LEFT OUTER JOIN连接的表,如何进行字段拼接
只看楼主
hst_hh
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-6-17
结帖率:100%
已结贴  问题点数:20 回复次数:2 
使用LEFT OUTER JOIN连接的表,如何进行字段拼接
info表
id  no(编号)  name(姓名)  nation(民族)  cprovince(省份)  link

在info表中,我用update info set link=cprovince+name+nation
将几个字段进行拼接后存储到link字段

但在info表中,因为程序原因,民族和省份在数据库中被存储为特殊的代码,比如民族被存为402881ec0cbb8cc8010cbbdff5740015,省份被存为40288a8a3314a5e7013325b440310c21,
我使用拼接后,link中显示的是40288a8a3314a5e7013325b440310c21张三402881ec0cbb8cc8010cbbdff5740015,而我需要的是北京市张三汉族

专门有一个表(nation)存储民族的中文信息,里面字段有id   requestid    cname
还有一个表(province)存储的是省份的中文信息,里面字段有id   requestid    pname

我使用LEFT OUTER JOIN可以将民族和省份显示为正常的中文

select a.id,a.no,a.name,,c.pname
from info as a left outer join
     nation as b on a.nation=b.requestid leftouter join
     province as c on a.cprovince=c.requestid

此时又没办法用我上面的update方法,那要如何用update来把link字段需要的内容进行拼接,或用什么方法能进行拼接?
搜索更多相关主题的帖子: 北京市 nation update 
2012-06-19 11:45
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
得分:20 
可以的!update的高级应用中,就可以帮你解决问题。

你试一下下面的思路:
update info set link=c.pname+a.name+
    from info as a left outer join
        nation as b on a.nation=b.requestid left outer join
        province as c on a.cprovince=c.requestid

另外,还有一些疑问,想与楼主交流的:
    在查询命令 select * from ... 中常使用left outer join 进行多表联合查询,达到某种特别的要求。
但在多表批量修改中,使用外连结的情况很少,一般是使用内连结。因为使用外连结,可能会有Null值参加更新表达式的运算,这样你还要考虑如何在表达式中处理空值的问题。所以上面的方法,在某些情况下会出现:处理的结果并不是自己想要的。
下在的这个方法,你也可以试一下:
update info set link=c.pname+a.name+
    from info a inner join
        nation b on a.nation=b.requestid inner join
        province c on a.cprovince=c.requestid

如果要设计的更完善,可能还要结合你的整个项目的情况。

 

做自己喜欢的事!
2012-06-22 06:30
hst_hh
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-6-17
得分:0 
谢谢netlin!你的方法完全可行,在测试中毫无问题!谢谢

你在我使用内外连接方法的疑问中,因为我表的一部分数据中,民族或省份可能就是null的,如果使用内连,那在民族或省份为null时此条数据不被显示,造成数据缺失。
2012-06-23 13:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371855-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.961646 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved