3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
你應(yīng)該用IS NOT NULL
。(比較操作符=
和<>
兩個(gè)給UNKNOWN
用NULL
于表達(dá)的任一側(cè))。
SELECT * FROM table WHERE YourColumn IS NOT NULL;
為了完整起見,我會提到在MySQL中你也可以否定null安全等式運(yùn)算符,但這不是標(biāo)準(zhǔn)的SQL。
SELECT *FROM table WHERE NOT (YourColumn <=> NULL);
編輯以反映評論。聽起來您的桌子可能不是第一種正常形式,在這種情況下,更改結(jié)構(gòu)可能會使您的任務(wù)更容易。其他幾種做法雖然......
SELECT val1 AS valFROM your_tableWHERE val1 IS NOT NULLUNION ALLSELECT val2 FROM your_tableWHERE val2 IS NOT NULL/*And so on for all your columns*/
上述缺點(diǎn)是它為每列掃描多次一次。下面可能會避免這種情況,但我還沒有在MySQL中對此進(jìn)行過測試。
SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS valFROM your_table /*CROSS JOIN*/ JOIN (SELECT 1 AS idx UNION ALL SELECT 2) tHAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以篩選出特定列中包含NULL值的行:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL
如果要過濾掉任何列中包含null的行,請嘗試以下操作:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL
更新:根據(jù)您的意見,也許你想要這個(gè)?
SELECT * FROM
(
SELECT col1 AS col FROM yourtable
UNION
SELECT col2 AS col FROM yourtable
UNION
-- ...
UNION
SELECT coln AS col FROM yourtable
) T1
WHERE col IS NOT NULL
我對Martin說,如果你需要這樣做,那么你應(yīng)該改變你的數(shù)據(jù)庫設(shè)計(jì)。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
Select * from your_table WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
這種方法的唯一缺點(diǎn)是你只能比較5列,之后結(jié)果總是假的,所以我只比較可以的字段NULL
。
添加回答
舉報(bào)