查找只有两行的 table。访问 2016
Find table with only two rows. Access 2016
我正在寻找可以在 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
在上面的示例 table 中,我将因此得到 CompanyID = 4
。
我尝试使用与此 post 中 SQL 相同的逻辑,但 Access 不允许语法 USING
。
post 中使用的 SQL 查询是:
SELECT CompanyID
FROM DATA AS a
JOIN DATA AS b
USING (CompanyID)
WHERE a.Product_Name = "Iphone"
AND b.Product_Name = "Ipad";
非常感谢任何反馈。
您可以使用 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
的结果。然后将其与所有具有 IPad
的结果相结合。只会返回两行都匹配的结果(因为 INNER JOIN
)。
既然你说:
So all CompanyID
that has only two rows with specific values... In the
example table above I will therefore get the CompanyID = 4
.
您似乎需要 CompanyID
,其中仅有的两个 Product_Name
值是 Ipad
和 Iphone
, 没有其他值 与 CompanyID
.
关联
要获得此结果,我可能会建议以下 SQL 查询:
select t.companyid
from data t
group by t.companyid
having max(t.product_name in ('Iphone','Ipad'))=-1
哪个 return:
CompanyID
4
此处,对于与给定 CompanyID
关联的每组记录中的每条记录,计算表达式 t.product_name in ('Iphone','Ipad')
。
此表达式将为 return True (-1
) 或 False (0
)。
如果组内所有条记录为'Iphone'
或'Ipad'
,则此表达式将return为真(-1
) 对于每条记录,组内的最大值将为 -1
.
然而,如果组内的 any 记录是其他值,则此表达式将 return False (0
) 因此最大值组将是 0
,因此将其从结果中排除。
虽然迟到了,但看起来它们只是从一个 table - 数据中提取出来的。如果是这种情况,那么最简单的解决方案应该是
SELECT DATA.CompanyID
FROM (DATA)
WHERE DATA.Product_Name = "Iphone"
AND DATA.Product_Name = "Ipad";
对于Access,FROM语句一般只用于组合table,或者查询,数据操作在其他语句中。
如果有多个 table 并且两个 table 之间的连接是 CompanyID,那么它应该看起来更像这样;
SELECT DATA1.CompanyID
FROM (DATA1 INNER JOIN DATA1.CompanyID ON DATA2.CompanyID)
WHERE DATA2.Product_Name = "Iphone"
AND DATA2.Product_Name = "Ipad";
我正在寻找可以在 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
在上面的示例 table 中,我将因此得到 CompanyID = 4
。
我尝试使用与此 post 中 SQL 相同的逻辑,但 Access 不允许语法 USING
。
post 中使用的 SQL 查询是:
SELECT CompanyID
FROM DATA AS a
JOIN DATA AS b
USING (CompanyID)
WHERE a.Product_Name = "Iphone"
AND b.Product_Name = "Ipad";
非常感谢任何反馈。
您可以使用 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
的结果。然后将其与所有具有 IPad
的结果相结合。只会返回两行都匹配的结果(因为 INNER JOIN
)。
既然你说:
So all
CompanyID
that has only two rows with specific values... In the example table above I will therefore get theCompanyID = 4
.
您似乎需要 CompanyID
,其中仅有的两个 Product_Name
值是 Ipad
和 Iphone
, 没有其他值 与 CompanyID
.
要获得此结果,我可能会建议以下 SQL 查询:
select t.companyid
from data t
group by t.companyid
having max(t.product_name in ('Iphone','Ipad'))=-1
哪个 return:
CompanyID
4
此处,对于与给定 CompanyID
关联的每组记录中的每条记录,计算表达式 t.product_name in ('Iphone','Ipad')
。
此表达式将为 return True (-1
) 或 False (0
)。
如果组内所有条记录为'Iphone'
或'Ipad'
,则此表达式将return为真(-1
) 对于每条记录,组内的最大值将为 -1
.
然而,如果组内的 any 记录是其他值,则此表达式将 return False (0
) 因此最大值组将是 0
,因此将其从结果中排除。
虽然迟到了,但看起来它们只是从一个 table - 数据中提取出来的。如果是这种情况,那么最简单的解决方案应该是
SELECT DATA.CompanyID
FROM (DATA)
WHERE DATA.Product_Name = "Iphone"
AND DATA.Product_Name = "Ipad";
对于Access,FROM语句一般只用于组合table,或者查询,数据操作在其他语句中。
如果有多个 table 并且两个 table 之间的连接是 CompanyID,那么它应该看起来更像这样;
SELECT DATA1.CompanyID
FROM (DATA1 INNER JOIN DATA1.CompanyID ON DATA2.CompanyID)
WHERE DATA2.Product_Name = "Iphone"
AND DATA2.Product_Name = "Ipad";