如何解决在MySQL中获取引用表
| 给定TABLE A
id field1 field2 field3
--------------------------
1 foo 1 2
2 bar 1 2
3 grok 2 3
TABLE B
id name
-------------
1 mike
2 test
TABLE C
id address
-------------
1 Nowhere
2 Somewhere
3 Everyhwere
field2是表B的外键
field3是表C的外键
是否有一种方法可以通过SQL通用地获取下面的数据(它可以应用于任何表)
引用表的表名(表B和C)。
外键引用表(表B和C)中的引用行数据
我不确定,但是信息模式可以帮助这一点吗?
解决方法
引用表名称
表(表B和C)。
不确定是否需要将此信息保存在列中才能获取。
引用中的引用行数据
外国表(表B和C)
钥匙
你可以试试:
select * from TableB where id in (select field2 from TableA);
select * from TableC where id in (select field3 from TableA);
,您可以在下一个查询中获得的SELECT语句列表-
SELECT CONCAT(\'SELECT * FROM \',referenced_table_schema,\'.\',referenced_table_name,\' JOIN \',table_schema,table_name,\' ON \',referenced_column_name,\'=\',column_name) selects
FROM
information_schema.key_column_usage
WHERE
referenced_table_schema = \'database_name\'
AND (referenced_table_name = \'table_b\'
OR referenced_table_name = \'table_c\')
GROUP BY
constraint_schema,constraint_name;
结果:
-------------------------------------------------------------
SELECT * FROM database1.table_b JOIN database1.TABLE_A ON database1.table_b.id=database1.TABLE_A.field2
-------------------------------------------------------------
SELECT * FROM database1.table_c JOIN database1.TABLE_A ON database1.table_c.id=database1.TABLE_A.field3
它适用于具有一列的外键,但是我认为可以重写它以支持复合索引。
SELECT语句可以与准备好的语句一起执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。