Select 来自 LEFT JOIN 子查询的最后一条记录

Select Last Record from LEFT JOIN Subquery

我正在使用子查询,我需要在 LEFT JOIN 中显示来自 customers_notes table 的最新注释。 我尝试的查询返回错误。 下面我做错了什么?

SELECT c.*, n.datesubmitted                    
FROM `customers` c 
LEFT JOIN (SELECT datesubmitted FROM `customers_notes` 
            ORDER BY datesubmitted DESC LIMIT 1) AS n           
                    ON (c.customerid = n.customerid)

我得到的错误是:#1054 - 'on clause'

中的未知列 'n.customerid'

要在 ON 子句中使用 n.customerid,您必须先 SELECT

SELECT c.*, n.datesubmitted                    
FROM `customers` c 
LEFT JOIN (SELECT datesubmitted, customerid FROM `customers_notes` 
            ORDER BY datesubmitted DESC LIMIT 1) AS n           
                    ON (c.customerid = n.customerid)

首先,您缺少 customerid 作为您在子查询中选择的字段 - 这就是您收到错误的原因。

其次,即使你添加了它,你也不会得到你想要的结果。

我假设你有一个客户,一个客户可以附有不止一张便条,你想获得客户的详细信息,以及他最近一条便条的所有详细信息。

这类问题的一般处理方法是:

在子查询中查找 max() 日期,它类似于:

select customerid, max(datesubmitted)
  from customer_notes
  group by customerid

然后在您的外部查询中加入这些结果

select c.*, n.*
  from customers c
    left join customer_notes n
      on c.customer_id = n.customer_id
    left join (
      select customerid, max(datesubmitted)
        from customer_notes
        group by customerid ) nn
      on n.datesubmitted = nn.datesubmitted

您缺少要加入的必填列。 在左连接查询列名 customerid 中丢失。

请参考以下查询

SELECT c.*, n.datesubmitted                    
FROM `customers` c 
LEFT JOIN (SELECT  customerid,datesubmitted FROM `customers_notes` 
        ORDER BY datesubmitted DESC LIMIT 1) AS n           
                ON (c.customerid = n.customerid)