使用多个表的相关子查询

Correlated subquery using multiple tables

我在执行某些任务时遇到问题。

我有很多这样的任务:创建一个查询,为每个客户显示他最后一张发票的 ID(姓名、姓氏、最后一张发票的 ID、发票日期)

以下是 table:

Table“客户”:

ClientID Surname Name Pesel
1 ABC XYZ 01234
etc etc etc etc

Pesel 是波兰人 id

Table“发票”:

InvoiceID InvoiceDate ClientID PaymentMethod
F1/2020 01.01.2020 1 Cash
etc etc etc etc

我必须使用带别名的相关子查询来完成。我知道比较来自单个 table 的记录是如何工作的,但是如何对其中的两个记录进行比较?

我从老师那里得到的例子是这样的:

SELECT a.subject, a.grade, a.data
FROM students_grade AS a
WHERE data = ( 
               SELECT MAX( data )
               FROM students_grade AS b
               WHERE a.subject = b.subject );

我需要做同样的事情

感谢您的帮助:)

按照您的示例使用 1 和 2 'invoices',然后加入 'clients':

select c.name, c.surname
     , i1.InvoiceID as `ID of last invoice`
     , i1.InvoiceDate as `invoice date`
from invoices i1
left join clients c on c.ClientID = i1.ClientID
where i1.InvoiceDate = ( select max(i2.InvoiceDate)
                         from invoices i2
                         where i2.ClientID = i1.ClientID)

示例数据的 dbfiddle here (MariaDB 10.3)

进行相关子查询的成本可能很高。到 pre-querying 每个客户的 max() 发票日期和加入应该会更好。

select
      PQ.ClientID,
      c.SurName,
      c.Name,
      i.InvoiceID,
      i.InvoiceDate
   from
      ( select
              clientID,
              max( InvoiceDate ) MaxDate
           from
              invoices
           group by
              clientID ) PQ
         JOIN Invoices i
            on PQ.ClientID = i.ClientID
           AND PQ.MaxDate = i.InvoiceDate
         JOIN Client c
            on PQ.ClientID = c.ClientID