2016-01-13 72 views
0

我在我的数据库中有一个名为book_collection, 的表,它具有列:publisherID,title,familyID,bookID 和另一个名为book_authors的表,其中有bookID和authorID列。如何对连接表执行查询?

我想一起加入表格,然后找到所有具有相同publisherID和标题的“books” 。

所以我最初开始:

SELECT book_collection.publisherId, book_collection.title,
book_authors.authorId FROM book_collection INNER JOIN book_authors ON book_collection.bookId = book_authors.bookId

这将连接表,但我有现在的问题是 我怎么能执行任何其他查询该表。 如果我复制此代码并将其粘贴在每个SELECT * FROM ...之后,它会给 一个错误,提示“每个派生表都需要一个别名”?

我不是最好的SQL,所以请与我轻轻一点。 任何帮助将不胜感激!

+1

'选择*(...您的查询这里...)AS alias',是你所需要的,正是因为错误消息说。 –

+0

[每个派生表必须有自己的别名]的可能重复(http://stackoverflow.com/questions/1888779/every-derived-table-must-have-its-own-alias) – Evgeny

回答

0
SELECT collection.* ,authors.* 
    ,book_authors.authorId 
    FROM book_collection as collection 
    INNER JOIN book_authors as authors 
    ON book_collection.bookId = book_authors.bookId 

使用此查询,您可以获取两个表中的所有列。如果你想有更好的表现,你可以有更多的过滤器内加入或在where子句

1

Every derived table needs an alias

在此错误意味着你需要在列使用表的别名与SELECT语句

如何使用别名:

您可以使用表名作为别名,如果你不希望使用自定义的别名。

例子:

SELECT collection.* ,authors.* ,book_authors.* FROM .... 

其他解决方案:

您还可以使用自定义的定义别名,例如:

SELECT c.* ,a.* , b.*  FROM collection c INNER JOIN authors a ON a.columnid = c.columnid .... 

基本原因的错误:

这个错误的原因是因为你在不同的表中有相同的列名和MYSQL不知道哪个列是哪个表的引用。在这类查询中使用别名总是有帮助的。

旁注:

我建议你使用易写多次自定义别名。基本上创建别名是为了使列名更具可读性。

更多的基本信息SQL ALIASES