Ms-Access

多值欄位查詢

  • October 31, 2018

我有 2 張桌子:

  • 聯繫人
  • 幫手

中的Helper欄位(連結到 Helper 表)Contacts是一個多值欄位,因此可以選擇多個助手並在報告中顯示。

每個助手鍊接到多個聯繫人。

我正在嘗試創建一個查詢,為一個助手選擇所有聯繫人,並顯示結果聯繫人的所有助手。我認為我對多值欄位不滿意,但找不到其他解決方案。

它在 Access 2010 中。表沒有多值欄位。他們是:

聯繫人

ContactID
Surname
Email

幫手

HelperID
Name

這是一個典型的情況,您必須創建三個表:Helpers、Contacts 和 Help_Contact,使用第三個表來表示前兩個元素之間的關聯,通過儲存前兩個的外鍵,沒有任何多值欄位在那些。

也就是說,你應該有類似的東西:

Helpers(h_primary_key, other_fields_only_relevant_to_helpers)
Contacts(c_primary_key, other_fields_only_relevant_to_contacts)
Help_contact(h_primary_key,c_primary_key)

因此,要顯示與另一個元素關聯的聯繫人或助手的資訊,您可以使用聯接:

SELECT relevant_info
FROM Helpers h, Contacts c, Help_contact hc 
WHERE hc.h_primary_key = h.h_primary_key AND hc.c_primary_key = c.c_primary_key AND other_conditions_on_helper_or_contact_or_both

從您的描述中不是很清楚 a)您使用的是什麼數據庫?b) 你在設計表格時需要幫助嗎?c) 或者您只需要 SELECT 查詢方面的幫助?但是,請展示你的桌子。

到目前為止,很明顯您有 2 個實體 Contacts 和 Helpers,連結為 M:M,因此 Renzo 建議第三個連結表是正確的。

讓你想從一些 Helper 唱片 X 開始跳舞。

此查詢將為您提供連結到 Helper X 的聯繫人列表:

SELECT Contacts.ID
FROM Contacts JOIN CH      ON Contacts.ID = CH.ContactsPtr 
             JOIN Helpers ON CH.HelpersPtr = Helpers.ID
WHERE Helpers.ID = X

這裡 CH 是具有兩個欄位 ContactsPtr 和 HelpersPtr 的連結表。

現在你想為每個這樣的聯繫人獲取所有連結的助手:

SELECT *
FROM Contacts JOIN CH      ON Contacts.ID = CH.ContactsPtr 
             JOIN Helpers ON CH.HelpersPtr = Helpers.ID 
WHERE Contacts.ID IN 
( SELECT Contacts.ID
 FROM Contacts JOIN CH      ON Contacts.ID = CH.ContactsPtr 
               JOIN Helpers ON CH.HelpersPtr = Helpers.ID
 WHERE Helpers.ID = X
) 

筆記:

1)結果查詢是最通用的形式,它可以讓你更好地調整它的油炸任務,例如代替“SELECT *”,只選擇有用的欄位。

  1. 如果可以僅從 Helpers 記錄的 ID 開始,即您不會對其他欄位有任何附加條件,則可以使用更簡單形式的子查詢,僅使用連結表來獲取 ID 列表:
SELECT *
FROM Contacts JOIN CH      ON Contacts.ID = CH.ContactsPtr 
             JOIN Helpers ON CH.HelpersPtr = Helpers.ID 
WHERE Contacts.ID IN   
     (SELECT ContactsPtr FROM CH WHERE Helpers.ID = X) 

引用自:https://dba.stackexchange.com/questions/105298