从多个表中获取结果

时间:2013-06-28 21:42:52

标签: mysql sql database

我有一张像这样的表orders -

id  | bookId 
------------
1      3              
2      2               
3      1  

books -

bookId  |  book
---------------
  1       bookA
  2       bookB
  3       bookC

是他们以任何方式获得bookbookId当我做

select * from orders where id = '1'

所以结果就像 -

id  | bookId 
------------
1      bookC         <------- bookC instead of 3  

3 个答案:

答案 0 :(得分:2)

您需要bookid ordersbookid列中的表booksselect o.id, b.book as bookId from orders o inner join books b on o.bookid = b.bookid where o.id = 1; 表中的{{1}}列:

{{1}}

答案 1 :(得分:1)

执行JOIN后,要使用其他名称获取列,您只需说要获取b.book AS bookId

SELECT o.id, b.book as bookId
FROM orders o
INNER JOIN books b
    ON o.bookId = b.id
WHERE o.id = 1

(未经测试,DBMS可能会抱怨列名称的相似性)

答案 2 :(得分:0)

你要问的是两个部分。首先,根据这些表之间的某种关系(在这种情况下,关系由共享的JOIN列定义),您需要执行bookId以从多个表中获取信息。

查看this answer to a question about joins以获取多个参考资料,以帮助解释JOIN的作用。其他答案已经为您提供了一些代码示例,对于基本教程,总是w3schools

第二部分是您希望从books.book返回信息,但您不希望将列称为book以外的其他内容。因此,您必须使用别名,这可以通过AS关键字轻松完成(这通常也会与JOIN一起使用)。但是,将一列(books.book)别名为另一列(orders.bookId)的现有名称可能不是一个好主意。现有的bookId列包含整数,而不是字符串。如果你选择一个更具体的别名,从长远来看会更容易混淆。

要使用列别名,您必须在SELECT语句中专门引用要别名的列。例如:SELECT book FROM books AS your_alias_here

这是一个简单的方法来做我认为你想要的事情的例子:

SELECT orders.id, books.book AS your_alias_here
FROM  orders INNER JOIN books USING(bookId)

由于AS跟随books.book,因此别名将应用于book表中的books字段。