【问题标题】:Find table with only two rows. Access 2016查找只有两行的表。访问 2016
【发布时间】:2019-12-09 15:07:43
【问题描述】:

我正在寻找可以在 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。 post中使用的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


    【解决方案1】:

    既然你说:

    所以所有CompanyID 只有两行具有特定值...在 因此,我将得到 CompanyID = 4

    您似乎需要CompanyID,其中仅有的两个Product_Name 值是IpadIphone没有其他值CompanyID 关联。

    要获得这个结果,我可能会建议使用以下 SQL 查询:

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

    哪个会返回:

    CompanyID
    4
    

    这里,对于与给定CompanyID 关联的每组记录中的每条记录,都会计算表达式t.product_name in ('Iphone','Ipad')

    此表达式将返回 True (-1) 或 False (0)。

    如果组内的所有记录为'Iphone''Ipad',则此表达式将为每条记录返回True (-1),组内的最大值将为@ 987654337@.

    然而,如果组内的 any 记录是其他值,则此表达式将返回 False (0),因此组的最大值将为 0,因此将其排除在外结果。

    【讨论】:

    • 这实际上是我想要实现的更多,因为我只得到相关的值,不需要做额外的过滤。感谢您提供此答案。非常感谢!
    【解决方案2】:

    您可以使用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)。

    【讨论】:

      【解决方案3】:

      虽然迟到了,但看起来它们只是从一张表中拉出来的 - DATA。如果是这种情况,那么最简单的解决方案应该是

      SELECT DATA.CompanyID
      FROM (DATA)
      WHERE DATA.Product_Name = "Iphone"
        AND DATA.Product_Name = "Ipad";
      

      对于Access,FROM语句一般只用于组合表,或者查询,数据操作在其他语句中。

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

      SELECT DATA1.CompanyID
      FROM (DATA1 INNER JOIN DATA1.CompanyID ON DATA2.CompanyID) 
      WHERE DATA2.Product_Name = "Iphone"
        AND DATA2.Product_Name = "Ipad";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 2017-07-26
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多