列出两个表中的用户

时间:2011-08-09 22:51:30

标签: mysql join ascii

您好user_table1user_table2我还有jobsemployers

当我从user_table1获取用户并为他们提取工作和雇主信息时,我的请求有效,但是当我加入用户table2时,它只会从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的所有记录合并,然后从jobs和{{1这个记录。

1 个答案:

答案 0 :(得分:0)

尝试UNIONing你的两张桌子。您需要在ORDER BY之外指定UNION子句。 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岁的过滤器,以及table2是否应该是唯一一个状态为4的过滤器。根据需要进行修改。