如何在select all query中检查空值?

时间:2011-06-15 07:07:13

标签: mysql database

我有一种情况需要从表中选择所有列,查询类似于:

select     sr.*,
           cs.subjectid,
           cs.priority,
           cs.subjectname   
from       sometable sr,   
           otherTable cs   
where      sr.col1='E2011FT0'   
  and      sr.col2='5'     
  and      sr.col3=  '66018'  
  and      cs.col1=sr.col1
order by   cs.col2;

如何检查sr.*列中的空值并将其替换为其他值? sometable表中有很多列,我试图避免明确列出它们。

2 个答案:

答案 0 :(得分:1)

我不相信你在标准的SQL MySQL中可以实现的目标(好吧,不是直接在桌面上,但请参阅下面的可能解决方案)。

sr.*上无法执行常见的列操作,您必须单独执行列,例如:

select sr.column1,
       sr.column2,
       coalesce (sr.column3, 0),
       sr.column4,
       cs.subjectid ...

一种可能性,虽然它有点kludgy,但是提供一个实际表的视图,其中视图的每一列被类似地命名,但在等效表列上被定义为coalesce。 我的意思是:

create view sometableview (column1, column2, column3, column4)
    as select column1, column2, coalesce (column3, 0), column4
        from sometable;

select srv.*,
       cs.subjectid, ...
:
from sometableview srv,   
     otherTable cs
where ...

这不会使更快,但它会让你的查询更简单,这似乎是你所追求的。我不完全确定为什么这是一个要求,因为查询往往设置一次并且很少改变,因此担心它们的长度是不寻常的。但是,除非另有通知,否则我将假设您有充分的理由要求: - )

答案 1 :(得分:0)

使用SELECT和COUNT函数计算给定列的所有行,包括空值,使用ISNULL函数。 ISNULL函数可以用有效值替换null值。 使用IsNULL函数,NULL将替换为0。

CREATE TABLE tabcount (
  pkey int IDENTITY NOT NULL CONSTRAINT pk_tabcount PRIMARY KEY,
  col1 int NULL)
GO

INSERT tabcount (col1) VALUES (10)
GO
INSERT tabcount (col1) VALUES (15)
GO
INSERT tabcount (col1) VALUES (20)
GO
INSERT tabcount (col1) VALUES (NULL)
GO

SELECT AVG(col1) A1,                                 (1)
       AVG(ISNULL(col1,0)) A2,                       (2)
       COUNT(col1) C1,                               (3)
       COUNT(ISNULL(col1,0)) C2,                     (4)
       COUNT(*) C3                                   (5)
FROM tabcount
GO






A1          A2          C1          C2          C3
----------- ----------- ----------- ----------- ---
15          11          3           4           4

- 聚合消除了空值          或其他SET操作。

(1) - 消除NULL值。 (2) - 使用IsNULL函数,NULL替换为0。 (3) - 消除NULL值。 (4) - 使用IsNULL函数,NULL替换为0。 (5) - COUNT(*)计算所有行,即使是那些有NULL的行。