0
来过滤不包含两个值的结果:我正在寻找可在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";
非常感谢任何反馈。
自您声明:
似乎您需要仅两个因此具有[[仅两行具有特定值的行]的所有[C0 ...因此,上面的示例表将得到
CompanyID
。
CompanyID = 4
值为CompanyID
和Product_Name
的Ipad
,没有其他值
与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
的结果结合在一起。仅返回两行都匹配(由于[C0])的结果。 IPad
对于Access,FROM语句通常仅用于合并表或查询,而数据操作在其他语句中。如果有多个表,并且两个表之间的连接是CompanyID,那么它应该看起来像这样;
INNER JOIN
0
来过滤不包含两个值的结果: