2017-08-07 37 views
0

的案例研究是像下面,3个表左连接任务,订单和客户,但不能得到

任务表有一个订单ID。
1任务属于订单表。订单可以有许多任务。任务表没有客户ID信息。

订单表具有客户ID。
1订单属于客户表。客户可以有很多订单。

现在我想生成一个任务表来显示任务属于哪个客户。 但是,我的结果是从客户的列都是NULL。我确认我的customer_id存在。是否有可能我不存储客户ID在任务表中?由于订单表已经存储了客户信息。

select `tasks`.`id`, `tasks`.`created_date`, `tasks`.`due_date`, tasks.order_id, orders.id, orders.cust_id, 
customers.id, `customers`.`name` 
from `tasks` 
left join `orders` on `tasks`.`order_id` = `orders`.`id` 
left join `customers` on `customers`.`name` = `orders`.`cust_id` 

这是我错过了什么吗?

回答

1

您的查询选择了客户名称,但您尝试将其加入costumer user_name。我建议你改变它们两个,以纠正列名(name或user_name)并尝试这种方式。例如,(这里我用的ID匹配他们,我编后):

select `tasks`.`id`, `tasks`.`created_date`, `tasks`.`due_date`, tasks.order_id, orders.id, orders.cust_id, 
customers.id, `customers`.`name` 
from `tasks` 
left join `orders` on `tasks`.`order_id` = `orders`.`id` 
left join `customers` on `customers`.`id` = `orders`.`cust_id` 

工作SQL小提琴:http://sqlfiddle.com/#!9/5835fd1/2

1

可能是你使用了错误的列尝试使用USER_ID代替FO USER_NAME连接表

select 
     `tasks`.`id` 
     , `tasks`.`created_date` 
     , `tasks`.`due_date` 
     , tasks.order_id, orders.id 
     , orders.cust_id, 
    customers.id, `customers`.`name` 
    from `tasks` 
    left join `orders` on `tasks`.`order_id` = `orders`.`id` 
    left join `customers` on `customers`.`user_id` = `orders`.`cust_id` 
+0

是的,你是对的...错字错误...继续尝试修复它的一天的一半...愚蠢的错误... – Shiro