309

NOT NULL 値のみを取る select ステートメントを実行することは可能ですか?

現在、私はこれを使用しています:

SELECT * FROM table

そして、php ループで null 値を除外する必要があります。

方法はありますか:

SELECT * (that are NOT NULL) FROM table

?

現在、* を選択すると、val1、val2、val3、null、val4、val5、null、null などを取得しますが、結果で null ではない値を取得したいだけです。ループでフィルタリングせずにこれは可能ですか?

4

10 に答える 10

517

を使用する必要がありますIS NOT NULL。(比較演算子=<>両方は、式の両側でUNKNOWNwith を指定します。)NULL

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

完全を期すために、MySQL ではnull 安全な等価演算子を無効にすることもできますが、これは標準 SQL ではありません。

SELECT *
FROM table 
WHERE NOT (YourColumn <=> NULL);

コメントを反映するように編集されました。テーブルが最初の正規形ではない可能性があるように思えます。その場合、構造を変更するとタスクが簡単になる可能性があります。それを行う他のいくつかの方法...

SELECT val1 AS val
FROM  your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2 
FROM  your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/

上記の欠点は、列ごとにテーブルを複数回スキャンすることです。これは以下で回避できる可能性がありますが、MySQL ではテストしていません。

SELECT CASE idx
         WHEN 1 THEN val1
         WHEN 2 THEN val2
       END AS val
FROM   your_table
        /*CROSS JOIN*/
       JOIN (SELECT 1 AS idx
                   UNION ALL
                   SELECT 2) t
HAVING val IS NOT NULL  /*Can reference alias in Having in MySQL*/
于 2011-03-12T21:01:04.620 に答える
22

特定の列に 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

更新: あなたのコメントに基づいて、おそらくこれが欲しいですか?

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 の意見に同意します。

于 2011-03-12T21:01:01.720 に答える
13
Select * from your_table 
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

このアプローチの唯一の欠点は、5つの列しか比較できないことです。その後、結果は常にfalseになるため、比較できるフィールドのみを比較しますNULL

于 2012-01-20T19:57:11.000 に答える
8

私はこの解決策を見つけました:

このクエリは、各列の最後の null 以外の値を選択します。


テーブルがある場合:

id|title|body
1 |t1   |b1
2 |NULL |b2
3 |t3   |NULL

あなたが得る:

title|body
t3   |b2

クエリ


SELECT DISTINCT (

  SELECT title
  FROM test
  WHERE title IS NOT NULL 
  ORDER BY id DESC 
  LIMIT 1
) title, (

  SELECT body
  FROM test
  WHERE body IS NOT NULL 
  ORDER BY id DESC 
  LIMIT 1
) body
FROM test

お役に立てれば幸いです。

于 2012-02-03T12:22:59.420 に答える
4

私のために働く次のクエリ

列「NULL」のデフォルト値を設定した場合

select * from table where column IS NOT NULL

そして、デフォルト値を何も設定していない場合

select * from table where column <>''
于 2018-08-05T20:11:07.190 に答える
2

MySQL 内で次のコマンドを使用して\!、シェルから NULL 値を grep します。

\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL

.my.cnfデータベース/ユーザー名/パスワードが指定されている適切な場所で最適に機能します。そうすれば、select\! mysql eで囲むだけ| grep -v NULLです。

于 2013-01-18T18:40:27.547 に答える
-5
SELECT * FROM TABLE_NAME
where COLUMN_NAME <> '';
于 2016-03-31T16:20:33.173 に答える