반응형
NULL
이 아닌 데이터 항목이 하나 이상있는 테이블 열의 목록을 갖고 싶습니다.
즉, 다음이 하나 이상의 항목을 반환하는 열 이름을 가져오고 싶습니다.
SELECT DISTINCT column_name FROM table WHERE column_name IS NOT NULL
다음을 시도했습니다.
SELECT column_name
FROM information_schema.columns
WHERE table_name = "table_name"
AND EXISTS (
SELECT DISTINCT column_name FROM table_name WHERE column_name IS NOT NULL
)
그러나 이것은 모든 항목이 NULL
인 열 이름도 반환합니다.
그렇다면 NULL
항목이 아닌 열만 가져 오려면 어떻게해야합니까?
해결 방법
빌드하려는 SQL은 다음과 같습니다.
SELECT 'column_a'
FROM table_name
WHERE `column_a` IS NOT NULL
HAVING COUNT(*)
UNION ALL
SELECT 'column_b'
FROM table_name
WHERE `column_b` IS NOT NULL
HAVING COUNT(*)
-- etc.
( WHERE
절을 생략하고 COUNT (column)
대신 COUNT (*)
를 대체 할 수 있지만 저는 생각합니다 인덱싱 된 열에서는 효율성이 떨어질 수 있습니다.)
다음을 사용하여 수행 할 수 있습니다.
SET group_concat_max_len = 4294967295;
SELECT GROUP_CONCAT(
' SELECT ',QUOTE(COLUMN_NAME),
' FROM table_name',
' WHERE `',REPLACE(COLUMN_NAME, '`', '``'),'` IS NOT NULL',
' HAVING COUNT(*)'
SEPARATOR ' UNION ALL ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'table_name';
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
참조 페이지 https://stackoverflow.com/questions/13400071
반응형
'MySql' 카테고리의 다른 글
MySQL xampp mysql 명령 창으로 데이터베이스를 만들 수 없습니다. (0) | 2021.01.21 |
---|---|
MySQL 카운트 빈도 (0) | 2021.01.21 |
MySQL은 두 개의 쿼리를 결합합니다. (0) | 2021.01.20 |
MySQL DATEPART ()로 행 선택 (0) | 2021.01.20 |
MySQL 데이터베이스에 대한 마지막 변경 날짜 / 시간 가져 오기 (0) | 2021.01.20 |
댓글