MS Access多值字段查询

时间:2016-01-13 14:13:05

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

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

BazaNalaza专栏:

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

ResponsibleUnits:

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

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)不在结果集中。

任何想法有什么不对?

2 个答案:

答案 0 :(得分:1)

具有多值查找字段的查询可能有点奇怪,因为给定表的上下文有时可能位于" parent"水平,有时候是在孩子身上"水平。但是,这似乎适用于您的情况:

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"
            )
    )

答案 1 :(得分:0)

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

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

试试这个

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