sourcecode

MySQL에서 foreignKey 값에 대한 관련 데이터가 있는 모든 테이블을 가져오는 방법

copyscript 2022. 9. 23. 00:07
반응형

MySQL에서 foreignKey 값에 대한 관련 데이터가 있는 모든 테이블을 가져오는 방법

테이블이 많아요.모든 테이블에는 user.id(사용자 테이블, 프라이머리 키)을 가리키는 외부 키로서의 user_id가 있습니다.어떤 사용자가 데이터를 삽입/변경했는지 기록하기 위한 것입니다.

이제 사용자가 어떤 테이블에 데이터를 삽입했는지 알고 싶습니다.

모든 테이블을 합치지 않고 간단한 요령이 있나요?

  • 데이터를 기대하지 않는다(나중에 문의 가능)
  • foreign_key가 사용자 테이블을 가리키는 테이블을 알 필요가 없습니다(이미 알고 있습니다).
  • 사용자 데이터와 관련된 위치를 알고 싶다.

모든 테이블에 참여할 수는 있지만, 이는 큰 성능 문제가 될 것입니다.테이블도 많고 큰 것도 있어요.

다음과 같은 것을 찾고 있습니다.

SELECT tablename 
FROM information_schema.foo 
WHERE foreign_key = "key_name" AND foreign_key_value = 2;

직접적인 방법은 없다고 생각합니다만, 이용하실 수 있습니다.information_schema.key_column_usage쿼리를 작성할 수 있습니다.

SELECT 
  concat('select \'',TABLE_NAME,
  '\' as `in_table`, IF (',COLUMN_NAME,' IS NOT NULL, \'Present\', \'Absent\') as exist from ',
 TABLE_NAME, ' where ', COLUMN_NAME, ' = 2; ') as `query`
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = 'testdb' AND
  REFERENCED_TABLE_NAME = 'users';

이제 위의 쿼리를 사용하여 각 테이블에 대한 쿼리를 반환했습니다.user-id = 2user-id를 인수로 하여 위의 쿼리를 실행하는 프로시저를 작성할 수 있습니다.

다음과 같은 결과를 반복하십시오.

select 'employees' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from employees where user_id = 2; 
select 'profile_documents' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from profile_documents where user_id = 2; 

한 명씩 처형할 수 있습니다.

그런 다음 절차를 사용하여 사용자 정보가 있는 테이블의 이름을 반환합니다.

언급URL : https://stackoverflow.com/questions/58518566/how-to-get-all-tables-with-related-data-for-foreignkey-value-in-mysql

반응형