Как получить имена таблиц InnoDB, которые связаны со значением внешнего ключа? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть несколько таблиц (например, A, B, C .... и т. Д. С внешним ключом ADDRESS_ID), связанных с таблицей адресов, где ADDRESS_ID является первичным ключом.Таблицы A, B, C ... могут иметь значение address_ID или нет.Есть ли запрос, чтобы я мог получить имена таблиц с заданным ADDRESS_ID в таблице адресов?Обратите внимание, что это не имена таблиц для данного столбца в таблице адресов.Мне нужны имена таблиц для данного значения Address_ID в таблице адресов, если оно уже указано в других таблицах.(Я не знаю всех таблиц, на которые может ссылаться address_id.)

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

больше таблиц ......

Это то, что я пробовал:

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';

Но это не поддерживает то, что я точно хотел.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019
SELECT *
    FROM information_schema.REFERENTIAL_CONSTRAINTS
    WHERE REFERENCED_TABLE_NAME = 'address'

(при необходимости измените запрос)

0 голосов
/ 20 июня 2019
 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
...