SQL SELECT 多个 INNER JOIN

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3031589/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 06:33:00  来源:igfitidea点击:

SQL SELECT multiple INNER JOINs

sqlms-accessselectjoinreserved-words

提问by Noam Smadja

its Access database..

它的Access 数据库..

i have a Librarytable, where Autnm Topic Size Cover Langare foreign keys

我有一个图书馆表,其中Autnm Topic Size Cover Lang外键

each record is actually a book which has its properties such as author and stuff. i am not quite sure i am even using the correct JOIN.. quite new with "complex" SQL :)

每条记录实际上都是一本书,它具有诸如作者和内容等属性。我不太确定我什至使用了正确的 JOIN .. “复杂” SQL 相当新:)

SELECT Library.Bknm_Hebrew, Library.Bknm_English, Library.Bknm_Russian, Library.Note,
       Library.ISBN, Library.Pages, Library.PUSD, Author.ID AS [AuthorID],
       Author.Author_hebrew AS [AuthorHebrew],
       Author.Author_English AS [AuthorEnglish],
       Author.Author_Russian AS [AuthorRussian], Topic.ID AS [TopicID],
       Topic.Topic_Hebrew AS [TopicHebrew], Topic.Topic_English AS [TopicEnglish],
       Topic.Topic_Russian AS [TopicRussian], Size.Size AS [Size],
       Cover.ID AS [CoverID], Cover.Cvrtyp_Hebrew AS [CoverHebrew],
       Cover.Cvrtyp_English AS [CoverEnglish], Cover.Cvrtyp_Russian AS [CoverRussian],
       Lang.ID AS [LangID], Lang.Lang_Hebrew AS [LangHebrew],
       Lang.Lang_English AS [LangEnglish],

FROM Library INNER JOIN Author ON Library.Autnm = Author.ID
                 INNER JOIN Topic ON Library.Topic = Topic.ID
                 INNER JOIN Size ON Library.Size = Size.ID
                 INNER JOIN Cover ON Library.Cover = Cover.ID
                 INNER JOIN Lang ON Library.Lang = Lang.ID
WHERE (TopicID=13 AND LangID=1) ORDER BY LangID ASC 

Edit:After inserting the parantheses @Guffa suggested, I got a new error:

编辑:插入括号@Guffa 建议后,我得到一个新的错误:

Too few parameters. Expected 3.

Too few parameters. Expected 3.

回答by Guffa

In Access you need parentheses if you have more than one join. Also, as Ivar pointed out, you have an extra comma after the last item in the field list.

在 Access 中,如果您有多个联接,则需要括号。此外,正如 Ivar 所指出的,在字段列表中的最后一项之后有一个额外的逗号。

select
  Library.Bknm_Hebrew, Library.Bknm_English, Library.Bknm_Russian, Library.Note,
  Library.ISBN, Library.Pages, Library.PUSD, Author.ID as [AuthorID],
  Author.Author_hebrew as [AuthorHebrew], Author.Author_English as [AuthorEnglish],
  Author.Author_Russian as [AuthorRussian], Topic.ID as [TopicID],
  Topic.Topic_Hebrew as [TopicHebrew],  Topic.Topic_English as [TopicEnglish],
  Topic.Topic_Russian as [TopicRussian], Size.Size as [Size], Cover.ID as [CoverID],
  Cover.Cvrtyp_Hebrew as [CoverHebrew], Cover.Cvrtyp_English as [CoverEnglish],
  Cover.Cvrtyp_Russian as [CoverRussian], Lang.ID as [LangID],
  Lang.Lang_Hebrew as [LangHebrew], Lang.Lang_English as [LangEnglish]  
from
  (((((Library
  inner join Author on Library.Autnm = Author.ID)
  inner join Topic on Library.Topic = Topic.ID)
  inner join Size on Library.Size  = Size.ID)
  inner join Cover on Library.Cover = Cover.ID)
  inner join Lang on Library.Lang  = Lang.ID)

Edit:

编辑:

The error message "Too few parameters." means that you have defined parameters in the query that is not sent along when it's executed. As you don't use any parameters in the query it means that you have spelled some names in the query wrong, so that it thinks that they are parameters instead.

错误消息“参数太少”。意味着您在查询中定义了在执行时不会发送的参数。由于您没有在查询中使用任何参数,这意味着您在查询中拼错了一些名称,因此它认为它们是参数。

回答by Ivar Bonsaksen

I'm not too familiar with Access, and therefore not sure if it accepts this, but I would start by removing the last comma from the select list.

我对 Access 不太熟悉,因此不确定它是否接受这一点,但我首先从选择列表中删除最后一个逗号。

Lang.Lang_English AS [LangEnglish], => Lang.Lang_English AS [LangEnglish]