db:按id查找表名

时间:2011-09-21 09:11:14

标签: mysql sql database postgresql indexing

可以通过ID查找表名吗? 我有多个表扩展另一个表,当我在“超级”表中找到id时,我想知道哪个子表是该id。 有一种方法可以使用索引来执行此操作或其他方式吗? 感谢

2 个答案:

答案 0 :(得分:0)

标签说mysqlpostgresql。由于不清楚您想要哪一个,这里是mysql的解决方案。

显然,只有当你的表格设置了FOREIGN KEYS时才能这样做。例如,如果您有一个包含两个表的数据库dogs_and_peaople

dogs
------
id
owner_id -- foreign key on people.id
name

people
------
id
name
surname

如果您想了解dogs.owner_id对哪个表和字段进行了重复,您可以查看information_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'

答案 1 :(得分:0)

你的例子真的不清楚但是......

文章(东西,ID) 新闻(id引用文章(id),morestuff) 课程(id引用文章(id),evenmorestuff)

所以你使用文章中的id链接到新闻或课程,并希望避免从新闻和课程中选择联合?

1)您当前的查询不包含此信息

2)有几种方法可以做到这一点:

a)您将数据模型更改为更通用的内容(文章,r_article_news,新闻,r_article_courses,课程),并在此基础上确定

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;