1. ホーム
  2. マイスル

[解決済み】MySQLのSELECTは、NULL値でないもののみ。

2022-03-29 15:50:18

質問

NOT NULL値のみを受け取るselect文は可能ですか?

今、私はこれを使っています。

SELECT * FROM table

そして、phpのループでNULL値をフィルタリングする必要があります。

する方法はないでしょうか。

SELECT * (that are NOT NULL) FROM table

?

今、私が*を選択すると、val1,val2,val3,null,val4,val5,null,nullなどを得ますが、私はちょうど私の結果の中でnullではない値を取得したいです。これは、ループでフィルタリングすることなく可能ですか?

どのように解決するのですか?

を使用する必要があります。 IS NOT NULL . (比較演算子 =<> はどちらも UNKNOWNNULL を式の両脇に置く)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

念のため、MySQL でも ヌル安全等号演算子 が、これは標準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*/

上記の欠点は、各カラムに対して1回ずつ何度もテーブルをスキャンしてしまうことです。これは、以下の方法で回避できるかもしれませんが、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*/