我有一个包含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