繁体   English   中英

从LEFT JOIN子查询中选择Last Record

[英]Select Last Record from LEFT JOIN Subquery

我正在玩子查询,我需要在LEFT JOIN显示一个customers_notes表中的最新笔记。 我尝试的查询返回错误。 我在下面做什么错了?

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子句'中的未知列'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

要在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丢失。

请参考以下查询

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM