在UNION ALL上是可能的



我有一个包含USER和COMPANY的主表,名为USER1,它将用户映射到用户可以访问的公司,我还有一个包含所有可用公司列表的主表,名为COMPANY1。如果一个用户在USER1表中被分配了"company",那么这意味着该用户可以访问COMPANY1表中的所有公司。

USER1 table
User          |          Company
username1     |          MyCompany2
username2     |          MyCompany1
username3     |          
username4     |        

COMPANY1 table
Index       |      Company
1           |      MyCompany1
2           |      MyCompany2
3           |      MyCompany3
4           |      MyCompany4

是否有任何方法可以让我执行UNION ALL来获得以下内容:

NEW table
User          |          Company
username1     |          MyCompany2
username2     |          MyCompany1
username3     |          MyCompany1
username3     |          MyCompany2
username3     |          MyCompany3
username3     |          MyCompany4
username4     |          MyCompany1
username4     |          MyCompany2
username4     |          MyCompany3
username4     |          MyCompany4

我将非常感谢任何关于这件事的意见。:)我试过像

SELECT [User], [Company Name] FROM [USER1]
WHERE [Company Name] <> ''
UNION ALL
SELECT [User],
(SELECT [Company] FROM [COMPANY1]) [Company Name]
FROM [USER1]
WHERE [Company Name] = ''

显然,这给了我一个错误,我只能有一个结果。如何根据USER1等表的结果循环遍历COMPANY1等表?

谢谢。

您可以将Company1表中的CROSS JOIN用于具有用户分配的公司''的用户,这将为每个用户和每个公司对生成一行,并允许您的UNION ALL,如下所示:

SELECT [User], [Company Name] 
FROM [USER1] 
WHERE [Company Name] <> ''
UNION ALL
SELECT u.[User], c.[Company] as [Company Name]
FROM [USER1] as u
CROSS JOIN [Company1] as c
WHERE u.[Company Name] = ''

CROSS JOIN示例文档:sql-cross-join-with-examples

最新更新