2011-09-21 76 views
0

可以通过编号找到表名吗? 我有多个表扩展另一个表,当我在“超级”表中找到id时,我想知道哪个子表是该id。 有索引的方法来做到这一点或另一种方式? 谢谢db:通过编号查找表名

+0

除非你是动态创建的表,我没有看到在选择任何一种指数,只是为了确定一个表的时候,你可以很容易地通过它的名称来识别表。 否则,如果我没有正确理解你的问题,你可能看起来像这样: SELECT relid,relname FROM pg_stat_all_tables where schemaname ='YourSchema'; – ertx

+0

来解释我可以写一个例子:我有一个叫做文章的表格和两个叫做新闻和课程的表格。文章包含新闻和课程的常见信息和id。文章ID 1引用新闻或课程与ID 1.避免做一个选择在两个表上找到ID 1,我想知道表名直接在该表上查询。 – Pietro

回答

0

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

文章(的东西,ID) 消息(ID引用的文章(ID),morestuff) 课程(ID引用的文章(ID),evenmorestuff)

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

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

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

一)你改变你的数据模型的东西更通用的(文章,r_article_news,新闻,r_article_courses,课程),并确定在此基础上

b)您添加的物品表)您第一次查询略有信息(添加一个名为列类型,在这里您将进入任何新闻或课程)

ç较重确定自动

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; 
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 reperenced,你可以看看在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'