当前位置: 首页 > 面试题库 >

在一个查询中选择多对多表

公良信然
2023-03-14
问题内容

我有桌子:

**RUBRIC:** `RubricID, RubricName`

**AUTOR:** `AutorID, FirstName, LastName`

**BOOK:** `BookID, BookName, book_photo`

**BOOKAUTOR:** `BookID, AutorID`

**BOOKRUBRIC:** `BookID, RubricID`

我想写一个返回BookName,FirstName,LastName,RubricName的SELECT查询。

我有两个单独的查询,但我不知道如何在一个选择中编写此查询。这就是我得到的:

SELECT book.BookName, autor.FirstName, autor.LastName FROM bookautor JOIN book ON book.BookID=bookautor.BookID JOIN autor on autor.AutorID=bookautor.AutorID;

SELECT rubric.RubricName FROM bookrubric JOIN rubric ON rubric.RubricID=bookrubric.RubricID;

它工作正常,但如何在一个选择中编写?

我尝试这样做,但是不起作用:

SELECT book.BookName, autor.FirstName, autor.LastName, rubric.RubricName FROM bookautor,bookrubric JOIN book ON book.BookID=bookautor.BookID JOIN autor on autor.AutorID=bookautor.AutorID LEFT JOIN rubric ON rubric.RubricID=bookrubric.RubricID;

它返回错误:

ERROR 1054 (42S22): Unknown column 'bookautor.BookID' in 'on clause'

问题答案:

试试这个查询

SELECT book.BookName, autor.FirstName, autor.LastName, rubric.RubricName 
FROM bookautor
JOIN book ON book.BookID=bookautor.BookID 
JOIN autor on autor.AutorID=bookautor.AutorID 
left join bookrubric on book.BookID=bookrubric.BookID
LEFT JOIN rubric ON rubric.RubricID=bookrubric.RubricID;


 类似资料:
  • 问题内容: 我认为这应该很容易,但是却在逃避我。我在帐户和帐户组之间建立了多对多关系。一个帐户可以在零个或多个组中,因此我使用的是标准联接表。 我正在使用MS Access,FWIW。另外,这是针对低带宽的情况,因此代码优化不如简单性/可读性那么重要。 我使用php作为表示层,因此Access的基本结果很好。 至于如何处理多结果情况,我实际上有两件事正在尝试构建。第一列在一个列中列出了所有组,因此

  • 我的表是: 我有一个包含10,000个地址的列表,如果地址存在于表中,我将循环访问该列表以检索相应的纬度/经度。 查询如下所示: 然后我检查结果集,看看是否有匹配。然后通过上面的查询循环其他9,999个地址,这花费的时间太长了。 是否有一种方法可以创建一个包含所有10000个地址的查询,并返回一个包含4列的结果集: 任何未找到地址在结果集列中都应该有一个空(0或null)纬度/经度值。我假设我可以

  • 问题内容: 在hibernate状态下,我可以执行以下操作 现在,如果我想获取int和String怎么办? 现在列表的结构是什么? 问题答案: 这可以。您唯一需要了解的是它将返回如下列表:

  • 问题内容: 我正在用php(mysql)生成报告, 例如: 这样我有12张桌子。 我可以在单个查询中做到吗。如果我做到了?过程变慢了吗? 问题答案:

  • 问题内容: 基本上有属性表和翻译表-一个属性有很多翻译。 我需要从翻译中为指定属性的每个属性选择id和value,即使该语言没有翻译记录也是如此。我缺少某种连接技术,或者连接(不涉及语言表)在这里不起作用,因为以下操作不会返回具有指定语言的不存在的翻译的属性。 所以我正在使用这样的子查询,这里的问题是用相同的参数在同一个表中创建两个子查询(感觉像性能消耗,除非mysql将那些子查询分组,我怀疑这是

  • 问题内容: 在休眠状态下,我可以执行以下操作 现在,如果我想获取int和String怎么办? 现在列表的结构是什么? 问题答案: 这可以。您唯一需要了解的是它将返回如下列表: