【问题标题】:Access Database - SQL, Filtering by Multiple Items in Same Column访问数据库 - SQL,按同一列中的多个项目过滤
【发布时间】:2016-05-15 21:56:34
【问题描述】:

我正在尝试在 Access 中创建一个 SQL 查询,当 KEY 与三种非处方药(Motrin、Tylenol 和 Bayer)相关联时,它将返回所有字段(SELECT *)。在下面的示例中,AMYZ32874 的所有行都将被返回,WillyV32906 的任何行都不会被返回,因为他只与 3 种药物中的 2 种药物相关。

起始数据:

Key         Name      DOB       OTC
AmyZ32874   Amy Z     1/1/1990  Motrin
AmyZ32874   Amy Z     1/1/1990  Tylenol
AmyZ32874   Amy Z     1/1/1990  Bayer
WillyV32906 Willy V   2/2/1990  Motrin
WillyV32906 Willy V   2/2/1990  Tylenol
WillyV32906 Willy V   2/2/1990  Tylenol

期望的结果:

Key         Name      DOB       OTC
AmyZ32874   Amy Z     1/1/1990  Motrin
AmyZ32874   Amy Z     1/1/1990  Tylenol
AmyZ32874   Amy Z     1/1/1990  Bayer

我被困住了....这是我最近的尝试。

SELECT *
FROM SAMPLEDB
WHERE OTC IN ('Tylenol', 'Motrin', 'Bayer') and Key in
(SELECT Key FROM SAMPLEDB
GROUP BY Key HAVING COUNT (Key) > 2);

【问题讨论】:

  • 旁注:尽可能避免在表格中使用保留字(如Key)。它们会使更复杂的 SQL 语句变得混乱,有时会给您带来意想不到的结果。如果您无法避免该名称(有时您不能),请尝试将其括在括号中以帮助减少混淆。
  • 谢谢 C. White。感谢您的指导。

标签: sql ms-access jet-sql


【解决方案1】:

看起来有点难看,但我相信这应该可行:

SELECT 
  *
FROM 
  SAMPLEDB
WHERE 
  OTC IN ('Tylenol', 'Motrin', 'Bayer') 
  AND [Key] in
    (
      SELECT 
        [Key] 
      FROM 
        (
          SELECT 
            [Key]
            , OTC 
          FROM 
            SAMPLEDB
          WHERE 
            OTC IN ('Tylenol', 'Motrin', 'Bayer')
          GROUP BY 
            [Key]
            ,OTC 
        ) AS S1
      GROUP BY  
        [Key]
      HAVING 
        COUNT ([Key]) > 2
    );

【讨论】:

  • 谢谢,但我收到一条错误消息。它说“查询表达式'OTC WHERE OTC IN('Tylenol','Motrin','Bayer')中的语法错误(缺少运算符)”......我不确定该怎么想。我觉得不错。
  • 我想通了。 WHERE 子句需要放在 GROUP BY 之前。我想我可以更改它,您很可能需要对其进行审查。我会将其标记为已解决。谢谢!!!
  • 好收获。脑震荡写 SQL 的危害 :) 感谢指正!
【解决方案2】:

您应该在子查询中放入相同的“WHERE”语句:

(SELECT Key FROM SAMPLEDB
WHERE OTC IN ('Tylenol', 'Mothrin', 'Bayer')
GROUP BY Key 
HAVING COUNT(Key) > 2)

【讨论】:

  • 嗨@cChacon,谢谢,但这没有成功。我仍然得到相同的结果。
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 2011-07-12
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多