簡體   English   中英

Mysql LEFT JOIN 同一個表與 WHERE 條件

[英]Mysql LEFT JOIN same table with WHERE condition

我一直在嘗試使用LEFT JOIN來獲取學生 -> 老師和導師。 但它只返回其中之一,具體取決於WHERE條件是否具有p1.user_id =:userIdp2.user_id =:userId 但我想根據:userId獲取老師和導師

Students
ID | USER_ID | TEACHER_ID | TUTOR_ID |
1    5         3           4
Users
ID | FIRST_NAME| LAST_NAME | ROLE |
3    Lisa        Simpsons    TEACHER
4    Bart        Simpsons    TUTOR
5    Maggie      Simpsons    STUDENT

我當前的查詢:

SELECT users.*
FROM users
LEFT JOIN students AS p1 ON users.id = p1.teacher_id
LEFT JOIN students AS p2 ON users.id = p2.tutor_id
WHERE p1.user_id = 5

當前結果:

{id: 3, first_name: Lisa, last_name: Simpsons, role: TEACHER}

預期結果

{id: 3, first_name: Lisa, last_name: Simpsons, role: TEACHER}
{id: 4, first_name: Bart, last_name: Simpsons, role: TUTOR}

如果您需要left join ,您不應該在where使用左連接表列,而是將其添加到相關on子句中:

SELECT users.*
FROM users
LEFT JOIN students AS p1 ON users.id = p1.teacher_id AND p1.user_id = :userId
LEFT JOIN students AS p2 ON users.id = p2.tutor_id 

這樣你就可以連續獲得所有的價值

SELECT s.*, u1.* ,u2.*
FROM student s
LEFT JOIN user  AS u1 ON u1.id = s.teacher_id
LEFT JOIN user  AS u2  ON u2.id = s.tutor_id
WHERE s.user_id = 5 

但是如果你想要不同行的結果你需要聯合

select FIRST_NAME, LAST_NAME, ROLE
from student  
inner join  users on users.id = student.teacher_id 
    and student.user_id = 5
union 
select FIRST_NAME, LAST_NAME, ROLE
from student  
inner join  users on users.id = student.tutor:id 
    and student.user_id = 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM