如果表中的任何值不为null,则仅显示此非空值。否则仅显示null值

时间:2012-12-18 13:32:17

标签: mysql sql

我有桌子。

id    field1    field2
1     1000      500
2     1001      500
3     1002      500
4     1003      500
5     1004      500
6     1005      500
7     1006      500
8     1004      (null)
9     1003      (null)
10    1002      (null)

如何制作mysql查询:

如果任何field2不为null,则显示field2不为null的所有位置(id为1到7)。

如果所有field2都为null(没有id的表从1到7),则显示所有field2,其中field2为null(id为8到10)。

7 个答案:

答案 0 :(得分:1)

如果您要检索field2不是NULL而不是SELECT id FROM table_name WHERE field2 <> NULL; 的所有记录,请使用此

SELECT id FROM table_name WHERE field2 IS NULL;

如果你想反过来使用这个

{{1}}

答案 1 :(得分:1)

如果field1的值为空

,则可能意味着显示field2的值
SELECT COALESCE(field2, field1) fieldValue
FROM   tableName

答案 2 :(得分:1)

SELECT *
FROM tab
WHERE NOT EXISTS ( SELECT id 
                   FROM tab 
                   WHERE field2 IS NOT NULL LIMIT 1) 
AND field2 IS NULL
OR field2 IS NOT NULL

仅供澄清

OP正在寻找一个声明

拥有此数据

id    field1    field2
6     1005      500
7     1006      500
8     1004      (null)
9     1003      (null)

结果是

id    field1    field2
6     1005      500
7     1006      500

拥有此数据

id    field1    field2
8     1004      (null)
9     1003      (null)

结果是

id    field1    field2
8     1004      (null)
9     1003      (null)

答案 3 :(得分:1)

试试这个。

SELECT t.id,t.field1,t.field2
FROM t
WHERE id in (select id from t where field2 is not null)
or (select sum(ifnull(field2,0)) from t)=0

如果至少有一个非空字段2,它将返回其中field2不为空的行。 如果所有field2都为null,它将返回所有行。

不确定这是否是您所需要的。

答案 4 :(得分:0)

这个怎么样? 不是:这是tsql&gt;&gt; @@rowcount

--If `Any NOT null` you want to select `NOT null`
Select id,field1,field2 From T1 Where field2 IS NOT null

if (@@rowcount =0) --If `All null` you want to select `null`
    Select id,field1,field2 From T1 -- no need for Where field2 IS null

答案 5 :(得分:0)

也许你想要那样的东西

DECLARE @NullFields int;
set @NullFields=0;
select @NullFields= count(*) from tab Where field2 IS NOT NULL
if @NullFields == 0
    SELECT id FROM table_name WHERE field2 <> NULL;
else
    SELECT id FROM table_name;

如果所有fields2都为null,那么我们选择all。

答案 6 :(得分:0)

我知道你已经找到了一个可行的解决方案,但我也喜欢这种方法:

SELECT your_table.*
FROM your_table
WHERE
  field2 is not null =
  exists (select null from your_table where field2 is not null)
如果至少有一条记录Exists (...)不为空,则

field2返回true。 因此,如果存在此类记录,请将field2 is not null = true的所有行取出,这意味着获取field2不为空的所有记录。

如果此类记录不存在,请取field2 is not null = false所有行,这意味着取field2为空的所有记录。