SQL join获取没有连接的结果

时间:2016-03-23 04:49:35

标签: mysql sql join

我查了很多相关问题的帖子,但找不到答案。

我有两张表有一对多的关系。一个是客户,另一个是项目。一个客户可以拥有许多项目。他们的PK和FK是customer.customer_id和project_customer_id。

现在我使用以下SQL

SELECT *, COUNT(project.project_id) AS totalProjects 
FROM `customer`  LEFT JOIN `project` 
ON `project`.`customer_id` = `customer`.`customer_id`
ORDER BY `customer`.`date_created` DESC 

然而,当我现在获得所有客户时,它只返回实际拥有项目的客户。我使用内部,外部,左,联合和右连接但没有运气。我也试过DISTINCT,但也没办法。

有没有人知道这样的查询,即使他们没有项目也会返回所有客户?

提前谢谢, 罗德尼

3 个答案:

答案 0 :(得分:0)

使用此查询:

SELECT *, COUNT(project.project_id) AS totalProjects FROM `customer`  LEFT JOIN `project` ON `project`.`project_customer_id` = `customer`.`customer_id` GROUP BY `customer`.`customer_id` ORDER BY `customer`.`date_created` DESC

答案 1 :(得分:0)

因为你只关心项目的数量"如果我从你的问题中正确理解了#34;,要么创建一个函数来得到这个数,要么写一个子查询,如下面的例子......

SELECT 
    *,
    (
       SELECT COUNT(project.project_id) from project
       WHERE
       project.customer_id = customer.customer_id
    ) AS totalProjects 
FROM
    customer
ORDER BY customer.date_created DESC

答案 2 :(得分:-1)

您的问题不明确,但我认为您要尝试列出所有customers,如果有projectscustomer相关联,则会列出'项目&#39 ;?如果这是您的问题,那么下面的内容应该为您解决:

SELECT *, ISNULL((SELECT COUNT(*) FROM Project WHERE CustomerID = C.CustomerID),0) AS ProjectCount FROM Customer C ORDER BY C.Date_Created DESC