2012-12-18 81 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爲空的所有記錄。