我目前有两本与书有关的表格。第一个表BOOK如下所示:
BOOK_ID, TITLE, AUTHOR, PUBLISH_TIME, ...
第二个表BOOK_CHAPTER是关于这些书的章节。该表中的每一行对应于一本书中的一章,一本书有多章:
BOOK_ID, CHAPTER_ID, CHAPTER_STATUS, ...
我的问题是,给定一个BOOK_ID,是否可以使用一个语句来返回书籍的TITLE,AUTHOR,以及与该特定书籍相关的所有CHAPTER_ID和CHAPTER_STATUS?我已经提出了两个单独的select语句来完成目标,但由于BOOK表的返回结果是单行,而BOOK_CHAPTER包含多行,我想知道是否可以将两者合并为一个语句。提前致谢。
答案 0 :(得分:1)
您在FROM子句中使用JOIN将两个表连接在一起并返回两者的结果:
SELECT BOOK.*, BOOK_CHAPTER.*
FROM BOOK INNER JOIN BOOK_CHAPTER ON
BOOK.BOOK_ID = BOOK_CHAPTER.BOOK_ID
WHERE BOOK.BOOK_ID=<whateverbookyouarequerying>
Learn more about Join's in MySQL
Learn more about Join's in general
答案 1 :(得分:0)
MySQL GROUP_CONCAT
可能在这里运作良好。它可以将给定书籍的所有章节ID和状态聚合为逗号分隔列表。然后,可以在每本书的单记录中显示此CSV列表。
SELECT b.TITLE,
b.AUTHOR,
GROUP_CONCAT(bc.CHAPTER_ID SEPARATOR ','),
GROUP_CONCAT(bc.CHAPTER_STATUS SEPARATOR ','),
FROM BOOK b
INNER JOIN BOOK_CHAPTER bc
ON b.BOOK_ID = bc.BOOK_ID
GROUP BY b.BOOK_ID
答案 2 :(得分:0)
创建一个外部查询,从加入两个查询的结果中选择book_id;在每个子查询的选择列表中包含book_id;并加入book_id和计数
SELECT COUNT(*)
FROM (books_authors
WHERE books_authors.author_id IN
(
SELECT author_id
FROM obl_authors WHERE bookchapter='whatevernameis'
) GROUP BY books_authors.book_id) A
INNER JOIN
(
SELECT COUNT(*)
FROM books_authors
GROUP BY books_authors.book_id
) B
ON A=B