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
SQL SELECT multiple INNER JOINs
提问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]