2013-06-28 28 views
0

我有一个表orders这样得到结果 -从多个表

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

books -

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

是他们的任何方式,我可以得到bookIdbook列当我这样做

select * from orders where id = '1'

,这样的结果会是这样 -

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

回答

2

您需要JOINbookid列在表中的orders表到bookid列在books表:

select o.id, b.book as bookId 
from orders o 
inner join books b 
    on o.bookid = b.bookid 
where o.id = 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可能会抱怨列名称中的相似性)

0

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

检查出this answer to a question about joins几个参考资料,以帮助解释JOIN做什么。其他答案已经为您提供了一些代码示例,对于基本教程,总是有w3schools

第二部分是您要从books.book返回信息,但您不想拨打除book以外的其他列。所以你必须使用一个别名,这很容易用AS关键字完成(这也经常与JOIN一起使用)。但是,将另一列(orders.bookId)的现有名称替换为一列(books.book)可能不是一个好主意。现有的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,别名从books表应用于book领域。