Sql 寻找正确的联接(获取重复项)
我在创建查询时遇到问题。但在我问你这些问题之前,请先看一下我需要使用的三张桌子: 表1//AdminInvoicesSql 寻找正确的联接(获取重复项),sql,sql-server,Sql,Sql Server,我在创建查询时遇到问题。但在我问你这些问题之前,请先看一下我需要使用的三张桌子: 表1//AdminInvoices [AdminId] [InvoiceId] (...) 表2//AdminClientSystem [AdminId] [ClientId] (...) 表3//ClientData [CompanyId] [CompanyName] (...) 有关表的更多说明: 表1 InvoiceId通常不是唯一的,但对于公司来说是唯一的,即: AdminId Invoice
[AdminId] [InvoiceId] (...)
表2//AdminClientSystem
[AdminId] [ClientId] (...)
表3//ClientData
[CompanyId] [CompanyName] (...)
有关表的更多说明:
表1
InvoiceId通常不是唯一的,但对于公司来说是唯一的,即:
AdminId InvoiceId
16 1
14 1
24 1
3149 1
3150 1
3159 2
3157 2
3150 2
3149 2
3145 2
16 3
14 3
24 3
2015 3
3149 3
3159 4
3157 4
3150 4
表2:
AdminId CompanyId
3 1
3 1
3 1
3 1
3 1
3 1
3 2
3 2
3 3
3 4
3 4
3 4
3 9
3 9
3 9
3 9
3 9
3 9
3 9
3 9
3 13
3 13
3 13
表3:
CompanyId CompanyName
1 C1
2 C2
3 C3
9 C4
13 C5
我在使用join创建正确的查询时遇到问题。在我的例子中,我总是得到多余的数据作为答案。我想得到的是每家公司的发票数量
假设我确信C1生成了100张发票,C2 50和C3 200。无论我做什么查询,这些数字都是原来的两倍甚至更大——其他表中的一些行被复制到了一般结果中
我所尝试的:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN AdminClientSystem
ON AdminInvoices.AdminId = AdminClientSystem.AdminId
INNER JOIN ClientData
ON AdminClientSystem.CompanyId = ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
提前感谢您的帮助!:) 就我在您的示例中所见,AdminClientSystem有许多冗余条目,因此对于一个adminid,您有几个带有公司id的条目。不确定表中是否真的有这样的数据,或者您只是发布了一些错误的内容。 要仅使用一次,可以使用子查询,如:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN (select distinct AdminId, CompanyId from AdminClientSystem) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData
ON ACS.CompanyId= ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
就我在您的示例中所见,AdminClientSystem有许多冗余条目,因此对于一个adminid,您有几个带有公司id的条目。不确定表中是否真的有这样的数据,或者您只是发布了一些错误的内容。 要仅使用一次,可以使用子查询,如:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN (select distinct AdminId, CompanyId from AdminClientSystem) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData
ON ACS.CompanyId= ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
就我在您的示例中所见,AdminClientSystem有许多冗余条目,因此对于一个adminid,您有几个带有公司id的条目。不确定表中是否真的有这样的数据,或者您只是发布了一些错误的内容。 要仅使用一次,可以使用子查询,如:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN (select distinct AdminId, CompanyId from AdminClientSystem) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData
ON ACS.CompanyId= ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
就我在您的示例中所见,AdminClientSystem有许多冗余条目,因此对于一个adminid,您有几个带有公司id的条目。不确定表中是否真的有这样的数据,或者您只是发布了一些错误的内容。 要仅使用一次,可以使用子查询,如:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN (select distinct AdminId, CompanyId from AdminClientSystem) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData
ON ACS.CompanyId= ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
试试这个
SELECT CL.CompanyName, count([AdminInvoices.InvoiceId])
FROM AdminInvoices
INNER JOIN
(select distinct(AdminId),CompanyId
from AdminClientSystem
WHERE CompanyId IN
(SELECT DISTINCT CompanyId FROM ClientData)) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData as CL
ON ACS.CompanyId= CL.CompanyId
GROUP BY CL.CompanyName
试试这个
SELECT CL.CompanyName, count([AdminInvoices.InvoiceId])
FROM AdminInvoices
INNER JOIN
(select distinct(AdminId),CompanyId
from AdminClientSystem
WHERE CompanyId IN
(SELECT DISTINCT CompanyId FROM ClientData)) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData as CL
ON ACS.CompanyId= CL.CompanyId
GROUP BY CL.CompanyName
试试这个
SELECT CL.CompanyName, count([AdminInvoices.InvoiceId])
FROM AdminInvoices
INNER JOIN
(select distinct(AdminId),CompanyId
from AdminClientSystem
WHERE CompanyId IN
(SELECT DISTINCT CompanyId FROM ClientData)) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData as CL
ON ACS.CompanyId= CL.CompanyId
GROUP BY CL.CompanyName
试试这个
SELECT CL.CompanyName, count([AdminInvoices.InvoiceId])
FROM AdminInvoices
INNER JOIN
(select distinct(AdminId),CompanyId
from AdminClientSystem
WHERE CompanyId IN
(SELECT DISTINCT CompanyId FROM ClientData)) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData as CL
ON ACS.CompanyId= CL.CompanyId
GROUP BY CL.CompanyName
我认为它是SQL而不是mysql吗?我认为它是SQL而不是mysql吗?我认为它是SQL而不是mysql吗?我认为它是SQL而不是mysql吗,是-AdminClientSystem在前两列中有大量冗余数据,表中的其他列不同。我将在一秒钟内尝试,是-AdminClientSystem在前两列中有大量冗余数据,表中的其他列不同。我将在一秒钟内尝试,是-AdminClientSystem在前两列中有大量冗余数据,表中的其他列有所不同。