【问题标题】:get result from multiple tables从多个表中获取结果
【发布时间】:2013-06-26 18:47:30
【问题描述】:

我有一张这样的桌子orders -

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

还有这个books -

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

当我这样做时,我可以在bookId 下获得book 列吗

select * from orders where id = '1'

所以结果会像 -

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

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    您需要将JOINorders 表中bookid 列上的表books 表中bookid 列:

    select o.id, b.book as bookId
    from orders o
    inner join books b
      on o.bookid = b.bookid
    where o.id = 1;
    

    【讨论】:

      【解决方案2】:

      执行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 可能会抱怨列名的相似性)

      【讨论】:

        【解决方案3】:

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

        查看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 字段。

        【讨论】:

          猜你喜欢
          • 2017-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多