【问题标题】:MS Access multivalued field queryMS Access 多值字段查询
【发布时间】:2016-11-30 17:31:22
【问题描述】:

MS Access Database 2010,创建了以下表格:

BazaNalaza 栏目:

  • ID - 自动编号
  • ReportID - 编号
  • ResponsibleUnit - 数字,多值字段,链接到 ResponsibleUnits 表

责任单位:

  • ID - 自动编号
  • 姓名 - 文字
  • CompanyLine - 文本

ResponsibleUnits 包含以下数据:

ID  + Name      + CompanyLine
++++++++++++++++++++++++++++++
1   + ItOps     + Technology
2   + IdDev     + Technology
3   + CRM       + Marketing
4   + Legal     + ExCo
5   + ItDWH     + Technology

以下 SQL 查询工作正常:

SELECT * FROM BazaNalaza
WHERE BazaNalaza.ResponsibleUnit.Value IN (1,2,5)

但是,以下代码不起作用:

SELECT * FROM BazaNalaza
WHERE BazaNalaza.ResponsibleUnit.Value IN (SELECT ID FROM ResponsibleUnits WHERE CompanyLine = "Technology")

第二个查询仅适用于 bazaNalaza.ResponsibleUnit 中的值以 1、2 或 5 开头的行,而包含例如(3,5) 或 (4,5) 或 (3,4,5) 不在结果集中。

有什么想法吗?

【问题讨论】:

  • 我建议不要使用多值字段,它们仍然有问题。

标签: sql ms-access ms-access-2010 multivalue


【解决方案1】:

具有多值查找字段的查询可能有点奇怪,因为给定表的上下文有时可能位于“父”级别,有时位于“子”级别。但是,这似乎适用于您的情况:

SELECT b.* FROM BazaNalaza b
WHERE 
    EXISTS (
        SELECT ID, ResponsibleUnit.Value FROM BazaNalaza
        WHERE 
            ID=b.ID 
            AND
            ResponsibleUnit.Value IN (
                SELECT ID FROM ResponsibleUnits 
                WHERE CompanyLine = "Technology"
            )
    )

【讨论】:

  • 谢谢戈德汤普森!经过两天的仔细测试,我可以确认这个解决方案是正确且有效的!
【解决方案2】:

你真的不应该有多值属性。它违反了第一范式。

这种格式不起作用,您可能需要另一个表格来将该列与 BazaNalaza 表格分开。

试试这个

select disinct * from BazaNalaza inner join ResponsibleUnits on ResponsibleUnits.ID = BazaNalaza.ResponsibleUnit.Value

【讨论】:

  • 是的,我知道,但应用程序是继承的,需要快速解决方案(如果存在)。此外,数据库中充满了具有多值字段的表,因此重新设计需要数周时间:(
  • 当 3 、 4 或 5 在结果集中时,第二个查询根本不返回结果?这意味着什么?当我创建像你这样的表格时对我有用
  • 第一个查询工作正常。二是不工作。例如,当您在 BazaNalaza 中有以下行时: 1; 1个; (1,2) 2; 1个; (1,3) 3; 2; (3,4,5) 4; 1个; (3,4) 5; 6; (5) 6个; 3; (4,5) 第一个查询将返回第 1,2,3,5 和 6 行,而第二个查询将错过第 3 和 6 行。看起来只有多值字段中的第一个值用于比较?
  • 为什么在该列中存储为 (1,2) 2 ?不应该是 1、2 吗?
  • 是 1,2 我只是用括号强调多值字段,抱歉评论不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多