【问题标题】:SELECT query to collect results from two tablesSELECT 查询从两个表中收集结果
【发布时间】:2015-02-02 12:11:15
【问题描述】:

我有一个简单的查询,可以从“外借”表中选择一本书的最新到期日期。

我正在使用以下查询;

SELECT duedate, no
FROM loan 
WHERE duedate =
  (SELECT duedate FROM loan ORDER BY duedate DESC LIMIT 1);

查询结果显示最近的日期和取书人的“否”。
我现在正在寻找一种方法来修改查询以显示此人的姓名。但是,该姓名位于另一个名为“student”的表中,但上述查询结果中“loan”表中的“no”需要与“student”表中的人名相匹配。

结果中的“否”将与“学生”表中的姓名匹配,因为“否”也在“学生”表中与姓名相同的行中。

如何修改我的查询以显示姓名以及“否”和“到期日期”?

【问题讨论】:

标签: mysql select


【解决方案1】:
SELECT loan.duedate, loan.no, student.name FROM loan
INNER JOIN student ON loan.no = student.no
ORDER BY loan.duedate DESC LIMIT 1

试试这个..!祝你好运:)

【讨论】:

    【解决方案2】:

    join 让您可以组合不同表的列。您需要在on 子句中定义匹配列(在您的情况下为no,在大多数情况下这是一个ID)。

    SELECT loan.duedate, loan.no, student.name 
    FROM loan
    left JOIN student on loan.on = student.on
    

    【讨论】:

      【解决方案3】:

      使用 JOIN;

      SELECT loan.duedate, loan.no, student.name FROM loan
      INNER JOIN student ON loan.no = student.name
      

      了解更多关于MySQL JOIN


      而且我不明白您为什么在已有的 SQL 查询中使用 子查询。
      也可以这样,

      SELECT duedate, no FROM loan ORDER BY duedate DESC LIMIT 1
      

      【讨论】:

        【解决方案4】:

        您需要使用join。此解决方案假定学生姓名列名为“name”。

        SELECT loan.duedate, loan.no, students.name FROM loan 
        LEFT JOIN students ON loan.no=students.no 
        ORDER BY loan.duedate;
        

        见http://www.w3schools.com/sql/sql_join.asp

        出于性能考虑,您很可能希望在两个表中的 no 列上创建索引。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-05
          • 2014-11-16
          • 1970-01-01
          • 1970-01-01
          • 2012-03-08
          • 1970-01-01
          • 2021-06-19
          • 1970-01-01
          相关资源
          最近更新 更多