web-dev-qa-db-ja.com

MySQL SELECTはnull値だけではない

NOT NULL値のみを取るselect文を実行することは可能ですか?

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

SELECT * FROM table

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

する方法はありますか:

SELECT * (that are NOT NULL) FROM table

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

233
bryan sammon

IS NOT NULLを使うべきです。 (比較演算子=<>は両方とも、式の両側にUNKNOWNを付けてNULLを与えます。)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

完全を期すために、MySQLでは null safe equality operator を否定することもできますが、これは標準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*/
408
Martin Smith

特定の列に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に同意します、あなたがこれをする必要があるならばあなたはおそらくあなたのデータベース設計を変えるべきである。

17
Mark Byers
Select * from your_table 
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

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

12
Alan Chavez

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

このクエリでは、各列に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

助けてください。

7
porquero

シェルからNULL値を削除するには、MySQL内で\!コマンドを使用します。

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

それはあなたのデータベース/ユーザー名/パスワードが指定されている適切な.my.cnfで最もうまくいきます。そうすれば、select\! mysql e| grep -v NULLで囲むだけで済みます。

2
A.J.

私のために働いて次のクエリ

列 'NULL'のデフォルト値を設定したら

select * from table where column IS NOT NULL

そして私はデフォルト値を何も設定していないとき

select * from table where column <>''
1
Basant

はい、以下のようにクエリにNOT NULLを使用します。

SELECT * 
FROM table
WHERE col IS NOT NULL;
0

MYSQL IS NOT NULL with JOINS AND SELECT、INSERT INTO、DELETE&LOGICAL OPERATOR LIKE OR、NOT

Using IS NOT NULL On Join Conditions

 SELECT * FROM users 
 LEFT JOIN posts ON post.user_id = users.id 
 WHERE user_id IS NOT NULL;

 Using IS NOT NULL With AND Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 AND mobile_number IS NOT NULL;

Using IS NOT NULL With OR Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 OR mobile_number IS NOT NULL;
0
Developer