繁体   English   中英

选择一个表行以连接到另一表的每一行

[英]Select one table row to join to each row from another table

我有两个表,部门和帐户。 例如:

部门

+--------+--------+
|Company |DptCode  |
+--------+--------+
|SND     |CD41     |
+--------+--------+
|SND     |CD42     |
+--------+--------+

帐号

+--------+--------+
|Company |AcctCode |
+--------+--------+
|SND     |ACT      |
+--------+--------+
|SND     |BBS      |
+--------+--------+
|SND     |DIP      |
+--------+--------+

我正在尝试编写查询以选择要加入的每个部门,以从“客户”表中获取所有客户代码,例如

+--------+--------+
|DptCode |AcctCode|
+--------+--------+
|CD41    |ACT     |
+--------+--------+
|CD41    |BBS     |
+--------+--------+
|CD41    |DIP     |
+--------+--------+
|CD42    |ACT     |
+--------+--------+
|CD42    |BBS     |
+--------+--------+
|CD42    |DIP     |
+--------+--------+

我无法弄清楚是否需要对它们进行分组,我无法解决如何进行此联接的问题。 当我运行以下查询时,我得到了很多重复的行。

SELECT  d.Company, d.DptCode, a.AcctCode
FROM Departments d
JOIN Accounts a ON d.Company = a.Company

使用联接

;WITH CTE_dept(Company ,DptCode  )
AS
(
SELECT 'SND','CD41' UNION ALL    
SELECT 'SND','CD42'  
),CTe_Accounts(Company ,AcctCode )
AS
(
SELECT 'SND','ACT' UNION ALL     
SELECT 'SND','BBS' UNION ALL      
SELECT 'SND','DIP'      
)
SELECT cd.DptCode,
        ca.AcctCode
FROM CTE_dept cd
INNER JOIN CTe_Accounts ca
    ON  ca.Company = cd.Company

结果

DptCode  AcctCode
-----------------
CD41     ACT
CD41     BBS
CD41     DIP
CD42     ACT
CD42     BBS
CD42     DIP

我认为您需要CROSS JOIN

SELECT DISTINCT d.DptCode, a.AcctCode
FROM Departments d CROSS JOIN
     Accounts a; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM