我有桌子。
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)。
答案 0 :(得分:1)
如果您要检索field2
不是NULL
而不是SELECT id FROM table_name WHERE field2 <> NULL;
的所有记录,请使用此
SELECT id FROM table_name WHERE field2 IS NULL;
如果你想反过来使用这个
{{1}}
答案 1 :(得分:1)
答案 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
为空的所有记录。