sql >> Base de Datos >  >> RDS >> Mysql

MySQL Seleccione ÚNASE a 3 tablas

Necesitarás dos uniones. Algo como lo siguiente debería ayudarlo a comenzar (aunque no entiendo al 100% la relación entre pm_data y pm_info ):

SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
    pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY pm_data.date_sent DESC

Estoy asumiendo la relación entre pm_data y pm_info es la identificación del hilo. Si no es así, debería poder ajustar lo anterior a lo que necesite. También he ordenado por fecha de envío aquí, pero no mantendrá los hilos juntos . No estoy seguro de si desea mantenerlos juntos o no por la forma en que ha formulado su pregunta.

Si desea mantener los hilos juntos , necesitará una consulta más complicada:

SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
    pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
INNER JOIN (SELECT thread_id, MAX(date_sent) AS max_date
            FROM pm_data
            GROUP BY thread_id) AS most_recent_date 
           ON pm_data.thread_id = most_recent_date.thread_id
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY most_recent_date.max_date DESC, pm_data.thread_id, 
    pm_data.date_sent DESC

Esta consulta usa una subselección para encontrar la fecha de modificación más reciente para cada hilo, luego ordena por esto primero.