2011-08-09 35 views
0

嗨,我有user_table1user_table2我也有表jobsemployers列表中的用戶

當我得到user_table1用戶和拉動就業和用人單位的信息對他們來說,但我的要求工作,當我加盟的表2的只有來自user_table1的輸出增加了一倍,而不是顯示來自第二個表的用戶。

SELECT user_table1.age, user_table1.name, user_table1.lname, jobs.position, jobs.wage, employers.name employers.phone 
from user_table1 
LEFT JOIN jobs ON jobs.position_id = user_table1.position_id 
LEFT JOIN employers ON employers.position_id = jobs.position_id 
WHERE user_table1.age < 30 
ORDER BY user_table1.age ASC 

現在我也嘗試添加

SELECT user_table1.age, user_table1.name, user_table1.lname, jobs.position, jobs.wage, employers.name employers.phone 
from user_table1 
LEFT JOIN jobs ON jobs.position_id = user_table1.position_id 
LEFT JOIN employers ON employers.position_id = jobs.position_id 
LEFT JOIN user_table2 ON jobs.position = user_table2.position 
WHERE user_table1.age < 30 
user_table2.status = 4 
ORDER BY user_table1.age ASC 

在換句話說,我需要檢查哪裏user_table2.status=4,然後用所有記錄user_table1結合該記錄,其中age less than 30再拉場從jobsemployers爲這記錄。

回答

0

嘗試UNIONing你的兩個表。您需要在UNION之外指定ORDER BY子句。 UNION ALL允許重複。如果您不想使用模糊,請刪除ALL並僅使用UNION

SELECT * FROM 
(
    SELECT u.age, u.name, u.lname, jobs.position, jobs.wage, employers.name employers.phone 
    from user_table1 as u 
    LEFT JOIN jobs ON jobs.position_id = u.position_id 
    LEFT JOIN employers ON employers.position_id = jobs.position_id 
    WHERE u.age < 30 

    UNION ALL 

    SELECT u.age, user_table1.name, user_table1.lname, jobs.position, jobs.wage, employers.name employers.phone 
    from user_table2 u 
    LEFT JOIN jobs ON jobs.position_id = u.position_id 
    LEFT JOIN employers ON employers.position_id = jobs.position_id 
    WHERE u.age < 30 
    AND u.status = 4 
) AS UU 
ORDER BY UU.Age ASC 

我不是你的條件user_table1和user_table2相對於兩者是否應該得到的30歲過濾器清除,以及是否應表2是唯一一個與狀態4過濾器。根據需要進行修改。

+0

看起來不錯,但這不是我通常的寫作要求。我想我以前有這個問題,然後修復它,但現在我找不到它, 有什麼簡單的做我的原始查詢,使其工作? – Johnds

+0

@Johnds:如果我可以解釋你的問題,讓我知道如果我說得對。從兩個表中取出具有不同過濾條件的記錄,並將所有結果放入一個結果集中。這是你的問題的正確描述嗎? –

+0

@Johnds:你不能比聯盟簡單得多。 –