查找只有两行的表。 Access 2016

问题描述 投票:1回答:3

我正在寻找可在MS Access 2016中使用的查询,该查询将为我提供具有值"Iphone""Ipad"的所有公司ID。因此,只有两行具有特定值的所有CompanyID

CompanyID   Product_Name
1           Iphone
1           Ipad
1           Headphones
2           Iphone
2           Galaxy
3           Playstation 4
3           Nintendo Switch
4           Iphone
4           Ipad

因此,在上面的示例表中,我将得到CompanyID = 4

我已经尝试从此post使用与SQL中相同的逻辑,但是Access不允许语法USING。帖子中使用的SQL查询是:

SELECT CompanyID
FROM DATA AS a
  JOIN DATA AS b
  USING (CompanyID)
WHERE a.Product_Name = "Iphone"
  AND b.Product_Name = "Ipad";

非常感谢任何反馈。

sql ms-access ms-access-2010
3个回答
1
投票

自您声明:

因此具有[[仅两行具有特定值的行]的所有[C0 ...因此,上面的示例表将得到CompanyID

似乎您需要仅两个CompanyID = 4值为CompanyIDProduct_NameIpad

没有其他值

Iphone相关联。为了获得此结果,我可能建议以下SQL查询:

CompanyID

哪个会返回:

select t.companyid from data t group by t.companyid having max(t.product_name in ('Iphone','Ipad'))=-1

这里,对于与给定CompanyID
4
关联的每组记录中的每条记录,都会对表达式CompanyID进行求值。 

此表达式将返回True(t.product_name in ('Iphone','Ipad'))或False(-1)。

如果组中的

all

记录为0'Iphone',则此表达式将为每条记录返回True('Ipad'),并且组中的最大值为-1。] >然而,如果组中的

any

记录是其他某个值,则该表达式将返回False(-1),因此该组的最大值将为0,因此将其从结果中排除。] >
您可以使用0来过滤不包含两个值的结果:

INNER JOIN

输出:

SELECT a.CompanyID FROM ( SELECT CompanyID FROM DATA WHERE Product_Name = 'IPhone' ) a INNER JOIN ( SELECT CompanyID FROM DATA WHERE Product_Name = 'Ipad' ) b ON b.CompanyID = a.CompanyID

这是如何工作的?

首先收集所有具有CompanyID 1 4 的结果。然后,将其与所有具有IPhone的结果结合在一起。仅返回两行都匹配(由于[C​​0])的结果。

虽然很晚,但似乎只是从一个表-DATA中提取它们。如果是这种情况,那么最简单的解决方案应该是

IPad

对于Access,FROM语句通常仅用于合并表或查询,而数据操作在其他语句中。

如果有多个表,并且两个表之间的连接是CompanyID,那么它应该看起来像这样;

INNER JOIN


1
投票
您可以使用0来过滤不包含两个值的结果:

0
投票
虽然很晚,但似乎只是从一个表-DATA中提取它们。如果是这种情况,那么最简单的解决方案应该是
© www.soinside.com 2019 - 2024. All rights reserved.