반응형
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 = 2
user-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
반응형
'sourcecode' 카테고리의 다른 글
PHP 변수에서 클래스를 인스턴스화하시겠습니까? (0) | 2022.09.24 |
---|---|
JavaScript 개체의 속성을 열거하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
Mac OS X에서 PHP를 업그레이드하는 방법은 무엇입니까? (0) | 2022.09.23 |
JSON 데이터를 파일에 쓰려면 어떻게 해야 하나요? (0) | 2022.09.23 |
JVM이 사용하고 있는 키스토어를 확인하려면 어떻게 해야 합니까? (0) | 2022.09.23 |