我有一张像这样的表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
答案 0 :(得分:2)
您需要bookid
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}}列:
{{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
字段。