2011-09-21 32 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'