Ms-Access
多值欄位查詢
我有 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 *”,只選擇有用的欄位。
- 如果可以僅從 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)