2015-09-04 59 views
0

我試圖爲我的書創建一組標準化表格,然後 選擇按書籍標題或作者排序。 我希望每個作者都能有'n'本書,每本書'n'作者。使用外部參照從標準化表中選擇

我想解決的問題是如何顯示我的書籍和作者 按瓦片排序或按lastname,firstname,middlename排序?

我從一個像這樣的表開始,有大約1441個條目。

 
create table books(
bookid serial, 
title text, 
firstname text, 
lastname text); 

然後我創建了一個authors表

 
create table authors(
authorid serial, 
firstname text, 
lastname text); 

並填充它。

我然後創建的交叉引用表

 
create table bookAuthor 
( 
    bookId INTEGER NOT NULL REFERENCES books(bookId), 
    authorId INTEGER NOT NULL REFERENCES authors(authorId) 
); 

create unique index bookAuthor_unique_index on bookAuthor(bookId, authorId); 

然後我填充BOOKAUTHOR表1441名的條目。

我很確定這三張表填寫正確。我設法 做幾個插入到authors表中,然後將正確的交叉關係插入到bookauthor表中。

我現在卡住了,我不知道如何顯示我的書籍和作者 按標題或作者姓名排序。

我是否會錯誤地創建這種能力,爲每個作者創建N個標題,併爲每個作者創建N個作者。

我做了多次搜索外鍵和多個表似乎沒有解決我的問題。

我在postgresql 9.x環境中。

回答

0

加入會有所幫助。

select * from bookAuthor 
inner join books on bookAuthor.bookId = books.bookid 
inner join authors on bookAuthor.authorId = authors.authorid 
order by books.title; 

或者您可以通過訂購authors.lastname, authors.firstname來代替。

+0

錯誤:參數JOIN/ON必須是類型布爾值,而不是整型 LINE 3:內部聯接書bookAuthorization.bookId shucks我無法弄清楚如何格式化這個答覆.. – Vince

+0

我剛剛編輯查詢爲我忘了實際上加入任何東西的列。你是用sql編輯器還是通過編程語言來運行它?你收到的錯誤對我來說是陌生的。 – user258812

+0

測試格式化響應...'#select * from bookAuthor內部連接書籍bookAuthor.bookId內部連接作者bookAuthor.authorId order by books.title;'引發以下錯誤消息ERROR:JOIN/ON的參數必須是type布爾型,而不是整型 LINE 1:select * from bookAuthor內部加入書籍bookAuthority.boo ... ' – Vince