我查了很多相关问题的帖子,但找不到答案。
我有两张表有一对多的关系。一个是客户,另一个是项目。一个客户可以拥有许多项目。他们的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,但也没办法。
有没有人知道这样的查询,即使他们没有项目也会返回所有客户?
提前谢谢, 罗德尼答案 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
,如果有projects
与customer
相关联,则会列出'项目&#39 ;?如果这是您的问题,那么下面的内容应该为您解决:
SELECT *, ISNULL((SELECT COUNT(*) FROM Project WHERE CustomerID = C.CustomerID),0) AS ProjectCount
FROM Customer C
ORDER BY C.Date_Created DESC