单个MySQL语句来查询两个表

时间:2016-07-12 16:24:58

标签: mysql

我目前有两本与书有关的表格。第一个表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包含多行,我想知道是否可以将两者合并为一个语句。提前致谢。

3 个答案:

答案 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