如何获取链接到外键值的 InnoDB table 名称?
How to get InnoDB table names that are linked to foreign key value?
我有多个 table 链接到 'address' table,其中 ADDRESS_ID 是主键。表 A、B、C... 可能有 address_ID 值,也可能没有。是否有一个查询,我可以在地址 table 中获得具有给定 ADDRESS_ID 的 table 名称?请注意,这不是 'address' table 中给定列的 table 名称。如果地址 table 中的给定 Address_ID 值 已在其他 table 中引用,我需要 table 名称。 (我不知道所有可能引用了 address_id 的 table。)
Address table
ADDRESS_ID (PK) | STREET ADDRESS_1 | STREET_ADDRESS_2 | CITY | ZIPCODE
Table A
A_ID | ADDRESS_ID (FK) | FIELD _1 | FIELD_2
Table B
B_ID | ADDRESS_ID (FK)| FIELD _! | FIELD_2
Table C
B_ID | ADDRESS_ID (FK) | FIELD _! | FIELD_2
更多table秒......
这是我试过的:
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE
information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' AND
TABLE_CONSTRAINTS.TABLE_SCHEMA = 'flower_db' AND
TABLE_CONSTRAINTS.TABLE_NAME = 'address';
但这并不支持我真正想要的。
SELECT 'TableA' as Table_Has_Address
FROM TableA
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
UNION ALL
SELECT 'TableB' as Table_Has_Address
FROM TableB
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
UNION ALL
SELECT 'TableC' as Table_Has_Address
FROM TableC
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
SELECT *
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE REFERENCED_TABLE_NAME = 'address'
(根据需要调整查询)
我有多个 table 链接到 'address' table,其中 ADDRESS_ID 是主键。表 A、B、C... 可能有 address_ID 值,也可能没有。是否有一个查询,我可以在地址 table 中获得具有给定 ADDRESS_ID 的 table 名称?请注意,这不是 'address' table 中给定列的 table 名称。如果地址 table 中的给定 Address_ID 值 已在其他 table 中引用,我需要 table 名称。 (我不知道所有可能引用了 address_id 的 table。)
Address table
ADDRESS_ID (PK) | STREET ADDRESS_1 | STREET_ADDRESS_2 | CITY | ZIPCODE
Table A
A_ID | ADDRESS_ID (FK) | FIELD _1 | FIELD_2
Table B
B_ID | ADDRESS_ID (FK)| FIELD _! | FIELD_2
Table C
B_ID | ADDRESS_ID (FK) | FIELD _! | FIELD_2
更多table秒......
这是我试过的:
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE
information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' AND
TABLE_CONSTRAINTS.TABLE_SCHEMA = 'flower_db' AND
TABLE_CONSTRAINTS.TABLE_NAME = 'address';
但这并不支持我真正想要的。
SELECT 'TableA' as Table_Has_Address
FROM TableA
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
UNION ALL
SELECT 'TableB' as Table_Has_Address
FROM TableB
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
UNION ALL
SELECT 'TableC' as Table_Has_Address
FROM TableC
GROUP BY ADDRESS_ID
HAVING COUNT(CASE WHEN ADDRESS_ID = @address_id THEN 1 END) > 0
SELECT *
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE REFERENCED_TABLE_NAME = 'address'
(根据需要调整查询)