2015-05-13 3 views
0

Я играю с подзапросами, и мне нужно отобразить самую последнюю заметку из таблицы customers_notes в LEFT JOIN. Запрос, который я попытался, возвращает ошибку. Что я делаю неправильно ниже?Выберите последнюю запись из LEFT JOIN Подзапрос

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 - Неизвестный столбец 'n.customerid' в 'по статье'

+0

вы не выбираете поле, называемое 'customerid' в вас подзапрос псевдонимами как' n' –

ответ

2

Во-первых, вам не хватает 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 
1

Чтобы использовать n.customerid в ON пункте вы должны 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) 
-1

Вам не хватает нужной колонки, с которой вы соединяетесь. В левом столбце имени запроса запроса clientid пропущен.

Пожалуйста, обратитесь ниже запрос

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)