SQL仅在多个连接的情况下返回

时间:2010-07-08 08:04:03

标签: sql sql-server-2005

不知道怎么问这个,因为我有点像数据库菜鸟,

我想做的是以下内容。

table tb_Company
table tb_Division

我想退回有多个部门的公司,我不知道怎么做where子句。

SELECT   dbo.tb_Company.CompanyID, dbo.tb_Company.CompanyName, 
dbo.tb_Division.DivisionName FROM dbo.tb_Company INNER JOIN dbo.tb_Division ON 
dbo.tb_Company.CompanyID = dbo.tb_Division.DivisionCompanyID

非常感谢任何帮助或链接。

4 个答案:

答案 0 :(得分:1)

您需要另一个JOIN,其中您只使用GROUP BYHAVING条款返回具有多个分部的公司。

您可以阅读分组here

  

将选定的一组行分组到一个   一组汇总行的值   一个或多个列或表达式。一   为每个组返回一行。   SELECT中的聚合函数   条款清单提供   有关每个组的信息   个别行。

SELECT   dbo.tb_Company.CompanyID
        , dbo.tb_Company.CompanyName
        , dbo.tb_Division.DivisionName 
FROM    dbo.tb_Company 
        INNER JOIN dbo.tb_Division ON dbo.tb_Company.CompanyID = dbo.tb_Division.DivisionCompanyID
        INNER JOIN (
          SELECT  DivisionCompanyID
          FROM    dbo.tb_Division
          GROUP BY
                  DivisionCompanyID
          HAVING  COUNT(*) > 1
        ) d ON d.DivisionCompanyID = dbo.tb_Company.CompanyID

答案 1 :(得分:0)

怎么样?

WITH COUNTED AS
(
  SELECT C.CompanyID, C.CompanyName, D.DivisionName,
         COUNT() OVER(PARTITION BY C.CompanyID) AS Cnt
  FROM dbo.tb_Company C
  INNER JOIN dbo.tb_Division D ON C.CompanyID = D.DivisionCompanyID
)
SELECT *
FROM COUNTED
WHERE Cnt > 1

使用其他解决方案(两次加入Division表),可以在大量插入负载下返回单个公司/部门。

如果在第一次连接发生的时间和第二次连接的时间(使用Division / group by)之间插入having表中的行,则第一行{ {1}} join将返回一行。但是,第二个将返回2的计数。

答案 2 :(得分:0)

另一种选择......

SELECT c.CompanyId, c.CompanyName, d.DivisionName
FROM tbl_Company c
INNER JOIN tbl_Division d ON c.CompanyId=d.DivisionCompanyId
GROUP BY c.CompanyId, c.CompanyName, d.DivisionName
HAVING COUNT(*) > 1

答案 3 :(得分:0)

怎么样......

SELECT dbo.tb_Company.CompanyID,
       dbo.tb_Company.CompanyName, 
    FROM dbo.tb_Company
    WHERE (SELECT COUNT(*)
               FROM dbo.tb_Division
               WHERE dbo.tb_Company.CompanyID =
                          dbo.tb_Division.DivisionCompanyID) > 1;