Sql 查找只有两行的表。访问2016
我正在寻找一个可以在MS Access 2016中使用的查询,该查询将为我提供所有具有值Sql 查找只有两行的表。访问2016,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我正在寻找一个可以在MS Access 2016中使用的查询,该查询将为我提供所有具有值“Iphone”和“Ipad”的公司ID。因此,只有两行具有特定值的所有CompanyID CompanyID Product_Name 1 Iphone 1 Ipad 1 Headphones 2 Iphone 2 Galaxy 3 Playstation 4 3
“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
我尝试使用与this中的SQL相同的逻辑,但Access不允许使用语法。
post中使用的SQL查询为:
SELECT CompanyID
FROM DATA AS a
JOIN DATA AS b
USING (CompanyID)
WHERE a.Product_Name = "Iphone"
AND b.Product_Name = "Ipad";
非常感谢您的反馈 您可以使用内部联接
来过滤不同时包含两个值的结果:
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
的结果。然后,这与所有带有IPad
的结果结合在一起。仅返回两行匹配的结果(因为内部联接)。因为您声明:
所以所有的CompanyID
,只有两行具有特定值的。。。在
因此,上面的示例表将获得公司ID=4
似乎您需要的是CompanyID
,其中只有两个Product\u Name
值是Ipad
和Iphone
,没有与CompanyID
相关的其他值
要获得此结果,我建议使用以下SQL查询:
选择t.companyid
从数据t
t.companyid分组
最大值(t.product_name in('Iphone','Ipad'))=-1
将返回:
CompanyID
4
这里,对于与给定CompanyID
相关联的每组记录中的每个记录,计算('Iphone','Ipad')
中的表达式t.product\u name
此表达式将返回True(-1
)或False(0
)
如果组中的所有记录都是'Iphone'
或'Ipad'
,则此表达式将为每个记录返回True(-1
),组中的最大值为-1
)
然而,如果组中的任何记录是其他值,则此表达式将返回False(0
),因此组的最大值将为0
,从而将其从结果中排除。虽然晚些时候,它们看起来只是从一个表数据中提取出来的。如果是这样,那么最简单的解决方案应该是
SELECT DATA.CompanyID
FROM (DATA)
WHERE DATA.Product_Name = "Iphone"
AND DATA.Product_Name = "Ipad";
对于访问,FROM语句通常仅用于组合表或查询,而数据操作在其他语句中进行
如果有多个表,并且两个表之间的连接是CompanyID,那么它应该更像这样
SELECT DATA1.CompanyID
FROM (DATA1 INNER JOIN DATA1.CompanyID ON DATA2.CompanyID)
WHERE DATA2.Product_Name = "Iphone"
AND DATA2.Product_Name = "Ipad";
这实际上是我想要实现的,因为我只获得相关的值,不需要做额外的过滤。谢谢你提供这个答案。非常感谢!