2017-08-11 41 views
2

我有一個表名tbl_user此表包含mysql如何加入2和表1個表本身

db_uid db_fname db_lname db_responsibleid  db_email 
    1   xxx  yyy   0    [email protected] 
    2   ttt  eee   1    [email protected] 
    3   ggg  hhh   2    [email protected] 

其他表是tbl_task此表包含

db_taskid db_mytask db_desc db_status db_emailed db_userid 
    1   test  test  Done   0   2 
    2   bnvc  sdcs  Done   0   3 
    3   bcv  sdc   Scheduled  0   3 

現在我想有這樣的結果:

taskid mytask desc Status staffname responsiblename remail 
    1  test test Done  ttt eee  xxx yyy  [email protected] 
    2  bnvc sdcs Done  ggg hhh  ttt eee  ttt$x.com 

THI小號導致選擇具有db_status='Done'db_emailed='0' 與用戶的名稱,並負責與相關負責

我使用此查詢的電子郵件用戶的名稱所有的任務,但我不能讓名負責和他的電子郵件地址

select 
    tbl_task.db_mytask, 
    tbl_task.db_desc, 
    tbl_task.db_taskid, 
    tbl_task.db_status, 
    concat(tbl_user.db_fname,' ' ,tbl_user.db_lname) as name, 
    concat(user.db_fname,' ' ,user.db_lname) as uname, 
    user.db_email 
from tbl_task 
left join tbl_user 
    on tbl_task.db_userid=tbl_user.db_uid 
left join tbl_user as user 
    on user.db_uid=user.db_responsibleid 
where 
    (tbl_task.db_emailed='0') 
    and 
    (tbl_task.db_status='Done') 

目前的結果是:

taskid mytask desc Status staffname responsiblename remail 
    1  test test Done  ttt eee  NULL    NULL 
    2  bnvc sdcs Done  ggg hhh  NULL    NULL 

我該如何解決這個問題的任何建議或 幫幫我 ?!

回答

3

您加入的第二左邊的錯列連接(我有使用user1和USE2別名兩個連接上tbl_user)

您使用user.db_uid=user.db_responsibleid但應該tbl_user.db_uid=user.db_responsibleid

select 
    tbl_task.db_mytask, 
    tbl_task.db_desc, 
    tbl_task.db_taskid, 
    tbl_task.db_status, 
    concat(user1.db_fname,' ' ,user1.db_lname) as name, 
    concat(user2.db_fname,' ' ,user2.db_lname) as uname, 
    user2.db_email 
    from tbl_task 
    left join tbl_user as user1 on tbl_task.db_userid=user1.db_uid 
    left join tbl_user as user2 on user2.db_uid=user1.db_responsibleid 
    where tbl_task.db_emailed='0' 
    and tbl_task.db_status='Done' 
+0

我有我目前的結果上面,我張貼同樣的結果沒有負責的名字和他的電子郵件 –

+1

回答更新..倒在參加第二左表的連接 – scaisEdge

+0

謝謝這是工作 –

2

你可以試試這個查詢。 檢查它是否符合您的要求

select 
    tbl_task.db_taskid, 
    tbl_task.db_mytask as mytask, 
    tbl_task.db_desc,  
    tbl_task.db_status, 
    concat(tbl_user.db_fname,' ' ,tbl_user.db_lname) as name, 
    concat(users.db_fname,' ' ,users.db_lname) as responsiblename, 
    users.db_email as remail 
from tbl_user AS users 
    RIGHT OUTER JOIN tbl_user ON users.db_uid = tbl_user.db_responsibleid 
    RIGHT OUTER JOIN tbl_task ON tbl_user.db_uid = tbl_task.db_userid 
where (tbl_task.db_emailed='0') and (tbl_task.db_status='Done') 
+0

這個幫助也謝謝你 –