如何在PostgreSQL视图中用CategoryName替换BookCategoryID
修改PostgreSQL视图以显示分类名称而非ID
原视图创建语句:
CREATE VIEW tagging_books AS SELECT tags."TagName", books."BookISBN", books."BookName", books."BookCategoryID" FROM library INNER JOIN tags on library."TagName_id" = tags."id" INNER JOIN books on library."BookISBN_id" = books."id" ORDER BY tags."id"
category表结构:
| BookCategoryID | CategoryName |
|---|---|
| 1 | Toolbook |
需求:将视图中的books."BookCategoryID"替换为category."CategoryName",使视图结果展示分类名称,期望输出示例:
| tags.TagName | books.BookISBN | books.BookName | category.CategoryName |
|---|---|---|---|
| Python | ISBN 957-208-570-0 | Learn Python | Toolbook |
解决方案
只需要在原查询中新增与category表的关联,并替换SELECT子句中的目标字段即可,修改后的视图创建语句如下:
CREATE VIEW tagging_books AS SELECT tags."TagName", books."BookISBN", books."BookName", category."CategoryName" FROM library INNER JOIN tags ON library."TagName_id" = tags."id" INNER JOIN books ON library."BookISBN_id" = books."id" INNER JOIN category ON books."BookCategoryID" = category."BookCategoryID" ORDER BY tags."id";
补充说明
- 新增的关联语句通过外键
BookCategoryID将books表和category表绑定,确保能通过分类ID匹配到对应的分类名称; - 如果存在未关联分类的图书,且需要保留这类图书的记录,可以把
INNER JOIN category改为LEFT JOIN category,此时未关联分类的记录会显示NULL。
内容的提问来源于stack exchange,提问作者deeded307
相关产品推荐
相关产品推荐

