sql >> Databasteknik >  >> RDS >> Mysql

MySQL Välj JOIN 3 Tables

Du behöver två anslutningar. Något i stil med följande borde få dig igång (även om jag inte till 100 % förstår sambandet mellan pm_data och 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

Jag antar relationen mellan pm_data och pm_info är trådens id. Om det inte är det bör du kunna justera ovanstående till vad du behöver. Jag har också sorterat efter datum som jag skickade hit, men det kommer inte att hålla ihop trådarna . Jag är inte säker på om du vill hålla ihop dem eller inte utifrån hur du har formulerat din fråga.

Om du vill hålla ihop trådar , du behöver en mer komplicerad fråga:

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

Den här frågan använder ett underval för att hitta det senaste ändrade datumet för varje tråd och sorteras sedan efter detta först.



  1. Hur inaktiverar jag SQLAlchemy-cache?

  2. Android Studio kontrollerar/markerar inte Kotlin Room DAO-frågor när strängen upptar mer än 1 rad

  3. Hur man ändrar språk när man formaterar nummer i PostgreSQL

  4. EF 6 - Hur man korrekt utför parallella frågor