[英]How to get all tables with related data for foreignKey value in MySQL
我確實有很多桌子。 在每個表中都有一個 user_id 作為 foreign_key 指向 user.id(用戶表,主鍵)。 這是為了記錄哪個用戶插入/更改了數據。
有沒有加入所有表格的簡單技巧?
我可以加入所有表格,但這將是一個巨大的性能問題。 有很多桌子,有些也很大。
我正在尋找類似的東西:
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
的每個表返回查詢。 您可以創建一個以用戶 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;
並一一執行。
然后使用該過程返回存在用戶信息的表的名稱。
您可以查詢系統視圖INFORMATION_SCHEMA.KEY_COLUMN_USAGE
:
select
table_name,
column_name,
constraint_name,
referenced_table_name,
referenced_column_name
from information_schema.key_column_usage
where
referenced_table_name = 'user'
and referenced_column_name = 'user_id'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.