특정 테이블을 외래키로 참조하고 있는 모든 테이블의 참조칼럼 값이 Null인 행의 테이블명, 칼럼명, id 리스트를 보여주는 쿼리문이 있을까요??
예를 들어 a 테이블에서는 'user_id'칼럼이, b 테이블에서는 'custom_id', 'seller_id' 칼럼이 각각 user 테이블의 id를 참조하고 있을 때,
id | name |
101 | Kim |
102 | Park |
103 | Lee |
104 | Choi |
id | user_id |
1 | 101 |
2 | NULL |
3 | 103 |
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 테이블을 참조한 테이블과 해당 칼럼 목록을 가져오는 것까지 했습니다.
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 |
-- 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 ;