gpt4 book ai didi

sql - MS-Access 中的 INTERSECT 多个子查询(没有 INTERSECT 关键字)

转载 作者:行者123 更新时间:2023-12-01 10:46:20 28 4
gpt4 key购买 nike

我需要在 MS Access 中交叉多个子查询。遗憾的是,Access-SQL 不支持 INTERSECT 关键字。我明白,我们如何使用两个表的 INNER JOIN 来获得我们想要的交集。但是我怎样才能以编程方式创建一个查询来创建 N 个子查询的交集呢?

更具体地说:我有一张员工表和一张特化表。每个员工都可以有多个特化,这意味着员工和特化之间存在多对多关系,由一个包含员工 ID 和特化的附加表表示,没有什么复杂的。

现在假设我想要一份员工列表,所有员工都在某处指定了所有特化。在任何其他 SQL 引擎中,我会简单地创建一个子查询列表,并使用 INTERSECTION 关键字将这些子查询“连接”在一起,创建如下内容:

SELECT * FROM ( 
(SELECT id, first_name, last_name FROM Employees JOIN Emp_spec
ON Employee.id = Emp_spec.spec_id WHERE Emp_spec.spec_id=x_1 )
INTERSECT
...
INTERSECT
(SELECT id, first_name, last_name FROM Employees JOIN Emp_spec
ON Employee.id = Emp_spec.spec_id WHERE Emp_spec.spec_id=x_n )
);

,其中x_1,...,x_n 代表对应于某些特化的一些id。此查询返回一组员工,所有员工都具有所有特化 x_1,...,x_n。那么如何在没有 INTERSECT 关键字的情况下在 Access 中创建这样的查询。我一直在尝试使用 INNER JOIN 编写等效查询,但我似乎无法成功。

最佳答案

也许这就是你的想法。对于测试表 [Employees] ...

id  first_name  last_name
-- ---------- ---------
1 Gord Thompson
2 Homer Simpson
3 Hank Kingsley

... 和 [Emp_spec] ...

emp_id  spec_id
------ -------
1 1
1 2
2 1
3 1
3 2

...查询

SELECT * FROM Employees
WHERE id IN (SELECT emp_id FROM Emp_spec WHERE spec_id=1)
AND id IN (SELECT emp_id FROM Emp_spec WHERE spec_id=2)

返回

id  first_name  last_name
-- ---------- ---------
1 Gord Thompson
3 Hank Kingsley

关于sql - MS-Access 中的 INTERSECT 多个子查询(没有 INTERSECT 关键字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com