Mysql db:按id查找表名
是否可以通过id查找表名? 我有多个扩展另一个表的表,当我在“super”表中找到id时,我想知道该id在哪个子表中。 有一种索引方法可以做到这一点,还是另一种方法?Mysql db:按id查找表名,mysql,sql,database,postgresql,indexing,Mysql,Sql,Database,Postgresql,Indexing,是否可以通过id查找表名? 我有多个扩展另一个表的表,当我在“super”表中找到id时,我想知道该id在哪个子表中。 有一种索引方法可以做到这一点,还是另一种方法? 谢谢标签上写着mysql和postgresql。由于不清楚您想要哪一个,下面是针对mysql的解决方案 显然,只有在表中设置了外键时,才能执行此操作。例如,如果您有一个包含两个表的数据库dogs\u和\u people: dogs ------ id owner_id -- foreign key on people.id nam
谢谢标签上写着
mysql
和postgresql
。由于不清楚您想要哪一个,下面是针对mysql
的解决方案
显然,只有在表中设置了外键时,才能执行此操作。例如,如果您有一个包含两个表的数据库dogs\u和\u people
:
dogs
------
id
owner_id -- foreign key on people.id
name
people
------
id
name
surname
如果您想知道dogs.owner\u id
保留了哪些表和字段,您可以在信息\u schema
数据库中查找,如下所示:
SELECT
REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
information_schema.KEY_COLUMN_USAGE
WHERE
CONSTRAINT_SCHEMA = 'dogs_and_peaople' -- database name
AND TABLE_NAME = 'dogs'
AND COLUMN_NAME = 'owner_id'
你的例子确实不清楚,但是 物品(物品、身份证) 新闻(id参考文章(id),更多内容) 课程(id参考文章(id),EvermoreStuff) 那么您正在使用文章中的id链接到新闻或课程,是否希望避免从新闻和课程中选择联合 1) 您当前的查询不包含此信息 2) 有几种方法可以做到这一点: a) 您将数据模型更改为更通用的(文章、r_文章、新闻、r_文章、课程),并在此基础上确定 b) 在文章表中添加信息(添加名为type的列,在其中输入新闻或课程) c) 您将第一个查询稍微重一点,以便自动确定
SELECT a.*,b.type
FROM article a
INNER JOIN
(SELECT id,'news' AS type
FROM news
UNION
SELECT id,'courses' AS type
FROM courses) b
ON a.id=b.id;
除非您是动态创建这些表,否则我不认为选择任何类型的索引只是为了标识一个表有什么意义,您可以通过表名轻松地标识表。否则,如果我没有正确理解您的问题,您可能看起来像这样:从pg_stat_all_表中选择relid,relname,其中schemaname='YourSchema';为了解释这个问题,我可以写一个例子:我有一个名为article的表和两个名为news和courses的表。文章包含新闻和课程的常见信息以及id。文章id 1指id为1的新闻或课程。为了避免在两个表上都进行选择以查找id 1,我想知道直接在该表上进行查询的表名。