简体   繁体   中英

Mysql left join with condition in right table

I have been trying to solve this issue for a while, hope anyone help me. I am having two table, the first table is

Table Name : OnlineTest

OnlineTestId     category    subcategory                                                                   
     1            English      Spelling                                                                    
     2            English      Grammar
     3            English      Antonyms
     4            English      Synonyms

The second table is

Table Name : UserStatus

Id     userId    status         onlineTestId
1       1        Finished           1
2       1        Not Finished       2
3       2        Not Finished       1
4       2        Finished           3
5       3        Not Finished       4

Result

OnlineTestId    userId        status
    1               1         Finished
    2               1         Not Finished
    3               null      null
    4               null      null

I have tried this query,

select c.onlinetestid, d.userid, d.status from onlinetest c left join userstatus d on d.onlinetestid = c.onlinetestid
where c.category = 'English' and d.userid = 1;

But this query is bring the first two row of the result and not the last two, in which the userId and status are null.

How to bring the above result?

Place the d.userid = 1 predicate in the ON clause:

select c.onlinetestid, d.userid, d.status 
from onlinetest c 
left join userstatus d on d.onlinetestid = c.onlinetestid and d.userid = 1
where c.category = 'English' 

This will return all rows from onlinetest , having columns of userstatus filled with null s where predicate d.userid = 1 fails.

You can also use left outer Join as below :

SELECT        c.OnlineTestId, d.userId, d.status
FROM            OnlineTest AS c LEFT OUTER JOIN
                         UserStatus AS d ON d.onlineTestId = c.OnlineTestId AND d.userId = 1
WHERE        (c.category = 'English')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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