Join两张表时遇到空值如何处理

feizhouqiesara 2011-10-30 02:53:00
Join两张表时遇到空值如何处理
...全文
3630 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bushy 2011-10-30
  • 打赏
  • 举报
回复
如果是full outer join 或者 left join right join 等等,是会导致合并后的部分字段为空,
比如 A表和B表,A表和B表能关联起来的行是不为空的,但如果A表多余B表的行,那么对于B表,关联后,这些行,B表的所以字段当然都为NULL,反过来也同样,而且,这种情况无法用#3楼的【ISNULL】方法解决,
这是肯定会存在的,只能根据具体业务,把inner join 起来的行一类,left join的一类,right join的一类,等等
-晴天 2011-10-30
  • 打赏
  • 举报
回复
关键是你想怎么办,还有什么列是空值你要去考虑怎么办.
如果是连接列是空值,那很简单,它不能连接,也就查不到它们.
如果是其他列是空值,而你又是对该列进行处理的,那应该用类似于
sum(case when col is not null then 1 else 0 end)来处理,当然,也可能不是这种处理方法,关键是楼主想怎么办.
如果是左连接或右连接产生空值,同样要看你想怎么办,比如,空值就算1个,不空算那个列值的个数,等等.
特别地,如果是左连接或右连接时有空值,在连接表达式(on)中处理的,记录会出现在查询结果里,如果对空值的判断在筛选条件(where)里,那记录可能就不出现在查询结果里了.

总之,决定权在你.
--小F-- 2011-10-30
  • 打赏
  • 举报
回复
先说你需要得到什么结果 再处理

如果需要显示为空 则用isnull

如果需要去除结果集 就用 is not null
中国风 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 feizhouqiesara 的回复:]
Join两张表时遇到空值如何处理
[/Quote]
where 表名.列名 is not null --
dawugui 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feizhouqiesara 的回复:]
能不能说的具体点,比如我直接从两个表里面抽数据到另一张表里,遇到空置怎么办?
[/Quote]isnull函数.
ISNULL
使用指定的替换值替换 NULL。

语法
ISNULL ( check_expression , replacement_value )

参数
check_expression

将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value

在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

返回类型
返回与 check_expression 相同的类型。

注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。

示例
A. 将 ISNULL 与 AVG 一起使用
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。

USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO

下面是结果集:

--------------------------
14.24

(1 row(s) affected)

B. 使用 ISNULL
下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。

USE pubs
GO
SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
GO

下面是结果集:

Title Type Price
--------------- ------------ --------------------------
The Busy Execut business 19.99
Cooking with Co business 11.95
You Can Combat business 2.99
Straight Talk A business 19.99
Silicon Valley mod_cook 19.99
The Gourmet Mic mod_cook 2.99
The Psychology UNDECIDED 0.00
But Is It User popular_comp 22.95
Secrets of Sili popular_comp 20.00
Net Etiquette popular_comp 0.00
Computer Phobic psychology 21.59
Is Anger the En psychology 10.95
Life Without Fe psychology 7.00
Prolonged Data psychology 19.99
Emotional Secur psychology 7.99
Onions, Leeks, trad_cook 20.95
Fifty Years in trad_cook 11.95
Sushi, Anyone? trad_cook 14.99

(18 row(s) affected)

feizhouqiesara 2011-10-30
  • 打赏
  • 举报
回复
能不能说的具体点,比如我直接从两个表里面抽数据到另一张表里,遇到空置怎么办?
zlp321002 2011-10-30
  • 打赏
  • 举报
回复
把你的查询结果做成一个新的数据集 加 where 条件过滤空值啊。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧