假设我有两张桌子:
如果我想列出属于位置1,2 或 3的员工,我会编写类似于以下内容的查询:
SELECT DISTINCT e.id, e.name
FROM Employee e
JOIN EmpLocXref x ON x.employee_id = e.id
WHERE x.location_id IN (1, 2, 3)
;
Run Code Online (Sandbox Code Playgroud)
例子.
但是,如果我想列出仅属于1,2 和 3 位置的员工呢?我意识到我可以写类似的东西:
SELECT e.id, e.name
FROM Employee e
JOIN EmpLocXref x ON x.employee_id = e.id
WHERE x.location_id IN (1, 2, 3)
GROUP BY e.id, e.name
HAVING COUNT(*) = 3
;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,不包括动态SQL?
编辑:修复了第二次查询的derp时刻.添加了Fiddler示例.
小智 3
上面的代码实际上行不通,因为 EmpLocXref 中永远不会有一条记录,其中 location_id 同时为 1、2 和 3。你会得到零结果。试试这个:
SELECT DISTINCT e.*
FROM Employee e
INNER JOIN EmpLocXref x1 ON e.ID = x1.EmployeeID AND x1.Location_id = 1
INNER JOIN EmpLocXref x2 ON e.ID = x2.EmployeeID AND x2.Location_id = 2
INNER JOIN EmpLocXref x3 ON e.ID = x3.EmployeeID AND x3.Location_id = 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |