복붙노트

[SQL] 단지 null이 아닌 값을 선택 MYSQL

SQL

단지 null이 아닌 값을 선택 MYSQL

그것은 단지 NOT NULL 값을 사용 SELECT 문을 수행 할 수 있습니까?

지금은이를 사용하고 있습니다 :

SELECT * FROM table

그리고 나는 PHP는 루프 널 값을 필터링 할 수 있습니다.

할 수있는 방법이 있나요 :

SELECT * (that are NOT NULL) FROM table

?

내가 널 등 val1과,을 val2, val3, 널 (null), val4, val5, 널 (null)을 얻을 * 지금은 선택할 때 ....하지만 난 그냥 내 결과에서 null이 아닌 값을 얻을 싶어요. 이것은 루프 필터링없이 가능합니까?

해결법

  1. ==============================

    1.당신은 IS NOT NULL을 사용해야합니다. (비교 연산자 =와 <> 식의 양쪽 NULL 함께주고 UNKNOWN 모두).

    당신은 IS NOT NULL을 사용해야합니다. (비교 연산자 =와 <> 식의 양쪽 NULL 함께주고 UNKNOWN 모두).

    SELECT * 
    FROM table 
    WHERE YourColumn IS NOT NULL;
    

    그냥 완성도 나는 MySQL의에서 당신은 또한 널 안전 항등 연산자를 부정 할 수 있지만,이 표준 SQL하지 언급 것이다.

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

    의견을 반영하기 위해 수정 됨. 테이블의 구조를 변경하면 작업을 쉽게 할 수있는 경우에는 제 1 정규형에 없을 듯합니다. 하지만 그 일을 다른 방법의 몇 ...

    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*/
    
  2. ==============================

    2.당신은 특정 컬럼의 NULL 값을 포함하는 행을 필터링 할 수 있습니다 :

    당신은 특정 컬럼의 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
    

    그리고 나는이 작업을 수행해야하는 경우 그때는 아마 데이터베이스 설계를 변경해야한다는 마틴에 동의합니다.

  3. ==============================

    3.

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

    이 방법의 유일한 단점은 결과가 항상 false가 될 것입니다 그 후 나는 NULL이 될 수있는 필드 만 비교 않도록 만, 5 열을 비교할 수 있다는 점이다.

  4. ==============================

    4.나는이 해결책을 발견 :

    나는이 해결책을 발견 :

    이것은 각 열의 마지막 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
    

    내가 도움이 당신을 바랍니다.

  5. ==============================

    5.나는 \를 사용! MySQL의 내부 명령은 쉘에서 NULL 값을 grep을합니다 :

    나는 \를 사용! MySQL의 내부 명령은 쉘에서 NULL 값을 grep을합니다 :

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

    그것은 당신의 데이터베이스 / 사용자 이름 / 암호가 지정되어 적절한 .my.cnf 가장 잘 작동합니다. 당신은 그냥 \와 선택을 포위 할 필요가 그런 식으로! MySQL의 전자 및 | 그렙 -v NULL.

  6. ==============================

    6.나를 위해 쿼리 작업에 따라

    나를 위해 쿼리 작업에 따라

    그때 나는 열 'NULL'의 설정 기본값이있을 때

    select * from table where column IS NOT NULL
    

    그리고 난 후 설정 기본값 아무것도 없을 때

    select * from table where column <>''
    
  7. ==============================

    7.예 다음과 같은 쿼리에 NOT NULL을 사용합니다.

    예 다음과 같은 쿼리에 NOT NULL을 사용합니다.

    SELECT * 
    FROM table
    WHERE col IS NOT NULL;
    
  8. ==============================

    8.MYSQL IS NOT NULL WITH 조인 SELECT AND, INSERT INTO는 NOT DELETE 및 OR 논리 연산자 LIKE

    MYSQL IS NOT NULL WITH 조인 SELECT AND, INSERT INTO는 NOT DELETE 및 OR 논리 연산자 LIKE

    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;
    
  9. ==============================

    9.

    SELECT * FROM TABLE_NAME
    where COLUMN_NAME <> '';
    
  10. from https://stackoverflow.com/questions/5285448/mysql-select-only-not-null-values by cc-by-sa and MIT license