0

我有一张orders这样的桌子-

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

而这books——

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

当我这样做时,他们有什么办法可以让我book列在下面bookId

select * from orders where id = '1'

所以结果会像 -

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

3 回答 3

2

您需要将bookid列上的orders表连接到表中的bookidbooks

select o.id, b.book as bookId
from orders o
inner join books b
  on o.bookid = b.bookid
where o.id = 1;
于 2013-06-28T21:45:37.430 回答
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 可能会抱怨列名的相似性)

于 2013-06-28T21:48:32.550 回答
0

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

查看这个关于连接的问题的答案以获得一些参考资料,以帮助解释 a 的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)

ASfollowbooks.book开始,别名将应用于表中的book字段books

于 2013-06-28T22:02:36.343 回答