[MySQL 쿼리] 특정 데이블이 외래키로 참조된 각각의 테이블들의 참조칼럼 값이 Null 인 행을 찾는 쿼리 1 1 488

by DB초보 [SQL Query] MySQL Query 쿼리 참조 외래키 [2021.12.02 14:46:01]


특정 테이블을 외래키로 참조하고 있는 모든 테이블의 참조칼럼 값이 Null인 행의 테이블명, 칼럼명, id 리스트를 보여주는 쿼리문이 있을까요??

 

예를 들어 a 테이블에서는 'user_id'칼럼이, b 테이블에서는 'custom_id', 'seller_id' 칼럼이 각각 user 테이블의 id를 참조하고 있을 때,

user 테이블
id name
101 Kim
102 Park
103 Lee
104 Choi
a 테이블
id user_id
1 101
2 NULL
3 103
b 테이블
id custom_id seller_id
1 101 102
2 103 NULL
3 NULL 104

 

SELECT TABLE_NAME, COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE referenced_table_name = 'user';

위 쿼리문을 실행하면 user 테이블을 참조한 테이블과 해당 칼럼 목록을 가져오는 것까지 했습니다.

KEY_COLUMN_USAGE
TABLE_NAME COLUMN_NAME
a user_id
b custom_id
b seller_id

그 후에 각 테이블의 각 칼럼 값이 Null인 행을 찾는 쿼리를 어떻게 짜야 하는지 고민입니다 ㅠㅠ

 

SELECT * FROM 테이블명 WHERE 칼럼명 IS NULL;

요 쿼리가 '테이블명'의 '칼럼명' 값이 NULL인 행들을 찾아주는 것까지는 알겠는데

문제는 찾을 테이블도 여러개고 각 테이블마다 칼럼명도 달라서 한번에 처리할 수 는 없을까요???

KEY_COLUMN_USAGE로 찾은 테이블마다 각각 해줘야 할까요??

 

최종적으로 도출하고 싶은 결과는 아래와 같습니다.

결과
TABLE_NAME COLUMN_NAME id
a user_id 2
b seller_id 2
b custom_id 3

 

by 마농 [2021.12.02 17:56:16]
-- 1단계. SQL 구문을 만들어 내는 쿼리 --
SELECT 'SELECT null t_nm, null c_nm, null id WHERE 1=2' v_sql
 UNION ALL
SELECT CONCAT
        ( 'UNION ALL SELECT '''
        , table_name
        , ''', '''
        , column_name
        , ''', id FROM '
        , table_name
        , ' WHERE '
        , column_name
        , ' IS NULL '
        ) v_sql
  FROM information_schema.key_column_usage
 WHERE referenced_table_name = 'user'
;

-- 2단계. 1단계에서 민들어 낸 SQL 수행
SELECT null t_nm, null c_nm, null id WHERE 1=2
UNION ALL SELECT 'a', 'user_id', id FROM a WHERE user_id IS NULL
UNION ALL SELECT 'b', 'seller_id', id FROM b WHERE seller_id IS NULL
UNION ALL SELECT 'b', 'custom_id', id FROM b WHERE custom_id IS NULL
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입