2012-06-12 171 views
1

我有两个表用户和work_orders。 现在我需要通过从用户表字段进行过滤来获得work_orders结果。使用左连接和在另一个连接表的字段

我下面的查询没有返回结果。

SELECT `work_orders`.`id` as id, `work_orders`.`type` as type 
    , `work_orders`.`title` as title, `work_orders`.`status` as status 
    , `work_orders`.`publish_date` as publish_date 
    , `work_orders`.`priority` as priority, `work_orders`.`assigned_to` as assigned_to 
    , `work_orders`.`client_id` as client_id, `work_orders`.`due_date` as due_date 
    FROM (`work_orders`) 
    LEFT JOIN `users` 
    ON `users`.`id` = `work_orders`.`assigned_to` 
WHERE `work_orders`.`status` != 'closed' 
    AND users.manager_id = '143' 
ORDER BY `work_orders`.`id` DESC 
LIMIT 30 
+1

写你的问题时,使其可读请花一些时间。您也可能想要调查表的别名;例如,'选择work_orders中的wo.id作为wo'。没有必要在每个列/表上使用反标记;只在你使用保留名称的地方。 – Ben

+0

删除where子句,看看你得到了什么样的命中。 –

+0

将从下次检查该Ben – Yalamber

回答

0

您的WHERE子句是否筛选出所有结果?另外,如果要显示仅适用于特定用户的work_orders,请将您的LEFT JOIN更改为INNER JOIN,或使用EXISTS。

尝试......

SELECT field1, field2, ... 
FROM work_orders 
WHERE EXISTS (
    SELECT 1 
    FROM users 
    WHERE users.id = work_orders.assigned_to 
     AND manager_id='143' 
) 
+0

你好, work_orders对某些用户是pretian,但是再次链接到用户的manager_id的用户也是。现在我需要通过manager_id过滤work_orders,这是用户表中的字段 – Yalamber

+0

因此,您试图获取某个经理下的所有工作订单。正确? –

+0

是的,这就是我想要做的。 – Yalamber