您可以在 JOIN 条件中使用多值查找字段(通过它们的.Value 属性),但请注意,如果在连接的两侧都有这样的字段,那么当 any 时它将产生匹配 项在连接字段上匹配,而不是在 所有 项匹配时。视情况而定,这可能是可取的,也可能是不可取的。
案例 1:过敏学生
学校管理员需要跟踪过敏的学生,并为他们提供在学校食堂用餐时应避免的膳食清单。
[学生]
ID Student Allergies
-- ------- ---------
1 Alice Eggs, Soy
2 Bradley Peanuts
3 Carol
4 Dennis Soy
[用餐]
ID Meal Allergens
-- ------------- ---------
1 Thai stir-fry Peanuts
2 Tofu omlette Eggs, Soy
3 Waffles Eggs
查询
SELECT Students.Student, Students.Allergies, Meals.Meal, Meals.Allergens
FROM Students INNER JOIN Meals ON Students.Allergies.Value = Meals.Allergens.Value;
返回
Student Allergies Meal Allergens
------- --------- ------------- ---------
Alice Eggs, Soy Tofu omlette Eggs, Soy
Alice Eggs, Soy Waffles Eggs
Bradley Peanuts Thai stir-fry Peanuts
Dennis Soy Tofu omlette Eggs, Soy
这是合适的,因为 Alice 应该避免食用含有她过敏的任何成分的食物。
案例 2:酒店要求
[旅行者]
ID Traveller Requirements
-- --------- -------------------------
1 Gord free WiFi, in-room coffee
[酒店]
ID Hotel Amenities
-- ------------ ----------------------------
1 Budget Motel free WiFi, in-room coffee
2 Fancy Hotel in-room coffee, room service
查询
SELECT Travellers.Traveller, Travellers.Requirements, Hotels.Hotel, Hotels.Amenities
FROM Hotels INNER JOIN Travellers ON Hotels.Amenities.Value = Travellers.Requirements.Value;
返回
Traveller Requirements Hotel Amenities
--------- ------------------------- ------------ ----------------------------
Gord free WiFi, in-room coffee Budget Motel free WiFi, in-room coffee
Gord free WiFi, in-room coffee Fancy Hotel in-room coffee, room service
查询返回两个属性,因为它们都提供室内咖啡。不过,Fancy Hotel 不提供免费 WiFi,所以我宁愿不要住在那里。在这种情况下,默认的连接行为是不可取的(对我来说)。