【问题标题】:Trying to get results from 3 different tables using sql or linq query尝试使用 sql 或 linq 查询从 3 个不同的表中获取结果
【发布时间】:2021-02-15 12:36:52
【问题描述】:

我是 SQL/LINQ 的新手,真的可以使用您的帮助。

我有 3 张桌子:

邀请函

| InviteId | Name     | Email        | SalesAgentId |   |
|----------|----------|--------------|--------------|---|
| 9        | John Doe | john@doe.com | 1            |   |

SalesAgent

| SalesAgentId | UserId | Active       |
|--------------|--------|--------------|
| 1            | 2      | true         |

用户

| UserId | Name                                 | Email                             |
|--------|--------------------------------------|-----------------------------------|
| 2      | Sales Guy                            | sales@agent.com                   |

尝试生成给定 SalesAgent 的列表,该列表应包含该 SalesAgent 的信息以及销售代理已邀请的用户的信息(来自 Invitation 表)

目标: 尝试获取用户列表(来自 Invitation 表和 User 与 SalesAgent Id 绑定的表(用户是销售代理本人,或者用户是由销售代理邀请的)。

所以在这个场景中,目标是得到结果表(result)为:

ResultId:如果User表中有记录,则使用SalesAgentId,但如果记录来自 Invitation 表,然后将此列使用 InviteId

姓名/电子邮件:相同的逻辑;如果记录在 User 表中,则使用 User 表中的 Name/Email,如果不是,则使用 Invitation 表中的信息。

InvitedUser:如果记录在User表中,那么这应该是false,但是如果它来自Invitation strong> 表,那么这应该是真的。

| ResultId | Name      | Email           | InvitedUser |
|----------|-----------|-----------------|-------------|
| 1        | Sales Guy | sales@agent.com | false       |
| 9        | John Doe  | john@doe.com    | true        |

我不确定在这种情况下哪种联接对我有帮助,我或多或少需要结合来自 2 个查询的结果(我认为)。最终目标是获得此选择的 linq 查询版本,但我认为 LINQ/EfCore 在使用不同的数据存储时不支持 Concat。

我非常感谢任何类型的帮助,或正确方向的指针;非常感谢。

【问题讨论】:

  • 您想要一个特定代理的过滤列表,并且只有与该代理关联的受邀者?
  • 应该可能提供更大的数据样本,包括用户也是被邀请者的情况。 John Doe 不是用户吗?您显示的输出看起来像 UNION 查询的结果。

标签: sql linq entity-framework-core left-join


【解决方案1】:

您显示的输出看起来像 UNION 查询的结果,因此请考虑:

SELECT Invitation.InviteID AS ResultID, Invitation.Name, Invitation.Email, True AS InvitedUser
FROM Invitation
UNION
SELECT SalesAgent.SalesAgentID, User.Name, User.Email, False AS InvitedUser
FROM [User] INNER JOIN SalesAgent ON User.UserID = SalesAgent.UserID
WHERE (((User.Name) Not In (SELECT [Name] FROM [Invitation])));

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多