Этот запрос работает

SELECT 
    *,
    (SELECT dtm 
     FROM vladimir.chatthreadhistory hi 
     WHERE hi.dtm < ch.created 
     ORDER BY hi.dtm DESC 
     LIMIT 1) AS aa 
FROM 
    vladimir.chatmessage ch 
ORDER BY 
    ch.created DESC;

Но если я хочу отобразить больше из второго выбора, я получаю эту ошибку

   SELECT *,(SELECT dtm,threadid from vladimir.chatthreadhistory hi where hi.dtm <ch.created ORDER BY hi.dtm DESC limit 1)as aa 
FROM vladimir.chatmessage ch order by ch.created DESC;

Можешь мне сказать почему?

sql
-2
Vladimir Lebedev 21 Дек 2016 в 20:07
Вы не можете выбрать более одного столбца в подзапросе в проекционной части SQL
 – 
Gurwinder Singh
21 Дек 2016 в 20:09
Спасибо, мне, вероятно, следует использовать здесь присоединиться?
 – 
Vladimir Lebedev
21 Дек 2016 в 20:14

1 ответ

Лучший ответ

Вам нужны два разных коррелированных подзапроса. Вот один способ

SELECT *,
       (SELECT dtm
        FROM   vladimir.chatthreadhistory hi
        WHERE  hi.dtm < ch.created
        ORDER  BY hi.dtm DESC limit 1) AS aa,
       (SELECT threadid
        FROM   vladimir.chatthreadhistory hi
        WHERE  hi.dtm < ch.created
        ORDER  BY hi.dtm DESC limit 1) AS threadid
FROM   vladimir.chatmessage ch
ORDER  BY ch.created DESC; 

Если ваш DBMS поддерживает что-то похожее на оператор APPLY в SQL SERVER, то в одном запросе мы можем выбрать оба столбца

2
Pரதீப் 21 Дек 2016 в 20:18