2016-01-13 185 views
1

MS Access數據庫2010中,下面的表中創建的:MS訪問的多值字段查詢

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

任何想法有什麼不對?

+0

我建議只是不要使用多值字段,他們仍然是越野車。 –

回答

0

你真的不應該有多值屬性。這違反了第一種正常形式。

此格式不起作用,您可能需要另一張表將該列與BazaNalaza表分開。

試試這個

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

是的,我知道,但應用程序是繼承的,需要一個快速解決方案(如果存在)。此外,數據庫中充滿了具有多值字段的表,因此重新設計將花費幾周時間:( – Kriss

+0

第二次查詢在結果集中3,4或5時根本不返回結果?這對我來說意味着什麼?當我創建像你的表 – jae555

+0

第一個查詢工作正常。第二個不起作用。例如,當您在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行。看起來只有多值字段中的第一個值用於比較? – Kriss

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

謝謝戈登湯普森!經過兩天的仔細測試,我可以確認這個解決方案是正確的,並且可以正常工作! – Kriss