본문 바로가기
MySql

MySQL 항목이 널이 아닌 열 이름을 선택하십시오.

by 베이스 공부 2021. 1. 20.
반응형

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

 

 

반응형

댓글