2012-12-18 80 views
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查询:

如有场2不为空,表明所有地方FIELD2不为空(编号从1到7)。

如果所有的field2都是空的(table没有id,从1到7),则显示field2为空的所有field2(id从8到10)。

+1

Im confused.com!你需要重新说一句你的问题,我认为... – ManseUK

回答

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) 
+0

这就是它!谢谢你,兄弟。 – Damonsson

1

如果你想检索所有记录,其中field2NULL不是使用这个

SELECT id FROM table_name WHERE field2 <> NULL; 

如果你想反向利用这个

SELECT id FROM table_name WHERE field2 IS NULL; 
+0

'= NULL'将返回空,用'IS NULL'代替。 –

+0

@JW。我实际上已经写了IS NULL,但后来改回它,感到困惑,感谢为我清除它;) –

+0

我知道。但是如何“自动化”呢? 当任何值field2 <> NULL然后SELECT id FROM table_name WHERE field2 <> NULL, 但是当所有值field2 IS NULL NULL然后SELECT id FROM table_name [WHERE field2 IS NULL] - 总而言之这是不必要的,因为如果他们所有的field2都是空的,以检索所有这些 – Damonsson

1

也许你的意思是显示field1的值,如果值为field2 IS NULL

SELECT COALESCE(field2, field1) fieldValue 
FROM tableName 
0

如何abouth这一点。 注:这是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 
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为空,然后我们选择所有。

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都为空,它将返回所有行。

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

+0

另一个很好的答案,谢谢。 – Damonsson

0

我知道你已经找到了有效的解决方案了,但我也很喜欢这种方法:如果有至少一个记录,其中field2不为空

SELECT your_table.* 
FROM your_table 
WHERE 
    field2 is not null = 
    exists (select null from your_table where field2 is not null) 

Exists (...)返回true。 因此,如果这样的记录存在,采取所有行field2 is not null = true这意味着采取所有记录field2非空。

如果这样的记录不存在,则取所有的行,其中field2 is not null = false表示field2为空的所有记录。