0

我有桌子。

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 为空(没有 id 从 1 到 7 的表),则显示所有 field2 其中 field2 为空(id 从 8 到 10)。

4

7 回答 7

1

如果您想检索所有field2不是的记录,请NULL使用此

SELECT id FROM table_name WHERE field2 <> NULL;

如果你想要反向使用这个

SELECT id FROM table_name WHERE field2 IS NULL;
于 2012-12-18T13:36:31.570 回答
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

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

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

于 2012-12-18T14:05:00.783 回答
1

也许你的意思是field1如果field2IS NULL的值显示值

SELECT COALESCE(field2, field1) fieldValue
FROM   tableName
于 2012-12-18T13:41:31.373 回答
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)
于 2012-12-18T13:55:30.903 回答
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;

如果所有字段 2 都为空,那么我们选择全部。

于 2012-12-18T14:00:45.570 回答
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为空的记录。

于 2012-12-18T20:12:52.820 回答
0

这个怎么样。注意:这是tsql>> @@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
于 2012-12-18T13:56:36.123 回答