【问题标题】:select from normalized tables using external references使用外部引用从规范化表中选择
【发布时间】:2015-12-01 01:09:02
【问题描述】:

我正在尝试为我的书籍创建一组规范化的表格,然后 按书名或作者排序选择它们。 我希望每个作者有 'n' 本书,每本书有 'n' 个作者。

我要解决的问题是如何展示我的书籍和作者 按瓷砖或lastname,firstname,middlename排序?

我从这样的表格开始,其中包含大约 1441 个条目。

创建表书( bookid连载, 标题文字, 名字文本, 姓氏文本);

然后我创建了一个作者表

创建表作者( 权威连续剧, 名字文本, 姓氏文本);

并填充它。

然后我创建了一个交叉引用表

创建表书作者 ( bookId INTEGER NOT NULL REFERENCES 书籍(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 环境中。

【问题讨论】:

    标签: postgresql select foreign-keys normalization


    【解决方案1】:

    加入会有所帮助。

    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 订购。

    【讨论】:

    • 错误:JOIN/ON 的参数必须是布尔类型,而不是整数类型第 3 行:bookAuthor.bookId 上的内部连接书籍我不知道如何格式化此回复..
    • 我刚刚编辑了查询,因为我忘了实际加入任何内容的列。您是在 sql 编辑器中还是通过编程语言运行它?你收到的那个错误对我来说是陌生的。
    • 测试格式化响应...# select * from bookAuthor inner join books on bookAuthor.bookId inner join authors on bookAuthor.authorId order by books.title ;导致以下错误信息ERROR: argument of JOIN/ON must be type boolean, not type integer LINE 1: select * from bookAuthor inner join books on bookAuthor.boo...
    • user258812,我正在使用 psql 来测试您的解决方案。感谢您的答复。嗯,我刚刚尝试了您更新的解决方案 :) 它现在似乎正在产生输出。我尝试了select * from bookAuthor inner join books on bookAuthor.bookId = books.bookid inner join authors on bookAuthor.authorId = authors.authorid and authors.lastname='Patterson' order by books.lastname limit 3; ,效果很好。
    • 是的!我找到了詹姆斯·帕特森 (James Patterson) 的第二作者的书,将第二作者添加到作者表中,并将交叉链接添加到书作者表中,然后进行了选择,它是正确的!!!!!! supercalifradglisticexpidalocious !!!在发布到这里之前的一周的大部分时间里,我一直在努力解决这个问题。我得到了两个选择(按标题排序,按作者排序)。真的非常感谢你。现在开始尝试弄清楚如何在我的 PHP 代码中进行这项工作。以及如何防止添加重复作者/拼写错误
    猜你喜欢
    • 2021-01-12
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多