【发布时间】:2019-09-13 05:10:12
【问题描述】:
考虑一个带有 2 个表的数据库,如下所示。 CompanyId 是 Department 表中指向 Company 的外键。公司名称是唯一的,但部门名称不是。
表:Department
+-------+-----------+-----------+-------------------+
| id | name | CompanyId | phone |
+-------+-----------+-----------+-------------------+
| 1 | Sales | 1 | 214-444-1934 |
| 2 | R&D | 1 | 555-111-1834 |
| 3 | Sales | 2 | 214-222-1734 |
| 4 | Finance | 2 | 817-333-1634 |
| 5 | Sales | 3 | 214-555-1434 |
+-------+-----------+-----------+-------------------+
表:Company
+-------+-----------+
| id | name |
+-------+-----------+
| 1 | Best1 |
| 2 | NewTec |
| 3 | JJA |
+-------+-----------+
我有一个像下面这样的过滤器。当部门名称为 null(空)时,表示该公司的所有部门 id 都应包含在结果中,但当有列表时,它应仅包含列出的那些。
[ {
companyName: "Best1",
departmentName: ["Sales", "R&D"]
},
{
companyName: "NewTec",
departmentName: ["Finance"]
} ,
{
companyName: "JJA",
departmentName: null
}
}]
注意:过滤器是动态的(对 API 端点的请求),可能包括数千家公司和部门。
我想要一个 sql 查询来返回所有符合条件的部门 ID。对于此示例,结果将是“1,2,4,5”。 (返回除 NewTec 销售部门的 id (3) 之外的所有部门 id)
我正在寻找高效的 SQL 和/或 linq 查询来返回结果。 我可以遍历公司并为每个单独的部门过滤掉部门,但这意味着对于每个公司来说,将使用 ORM 访问一次数据库。有没有更好的办法来处理这种情况?
【问题讨论】:
-
您要处理数量不定的条件。有两种方法可以解决这个问题: (1) 根据您的条件动态构建查询字符串。 (2) 将条件放在单独的表中并针对该表进行查询。
标签: sql sql-server linq