[mysql] 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이 아닌 값을 얻고 싶습니다. 루프로 필터링하지 않고도 가능합니까?



답변

을 사용해야합니다 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*/


답변

특정 열에 NULL 값이 포함 된 행을 필터링 할 수 있습니다.

SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT 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과 동의를 취해야 할 경우 데이터베이스 디자인을 변경해야 할 것입니다.


답변

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

이 방법의 유일한 단점은 5 열만 비교할 수 있다는 것입니다. 그 후에는 결과가 항상 거짓이 될 수 있으므로 가능한 필드 만 비교합니다 NULL.


답변

이 솔루션을 찾았습니다.

이 쿼리는 각 열에 대해 마지막이 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

도와 드리겠습니다.


답변

\!MySQL 에서 명령을 사용하여 셸에서 NULL 값을 grep합니다.

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

.my.cnf데이터베이스 / 사용자 이름 / 암호가 지정된 적절한 위치에서 가장 잘 작동 합니다. 그런 식으로 당신은 당신을 둘러싸고있는 select\! mysql e| grep -v NULL.


답변

나를 위해 일하는 다음 쿼리

‘NULL’열의 기본값을 설정하면

select * from table where column IS NOT NULL

내가 기본값을 설정하면 아무것도

select * from table where column <>''


답변

예, NOT NULL아래와 같이 쿼리에 사용 하십시오.

SELECT *
FROM table
WHERE col IS NOT NULL;