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;