Access查询同一字段用AND运算符无结果?求筛选双旅行团客户方法
问题原因
你犯了一个逻辑错误:用AND要求同一行的TourID同时等于20WJHC和24WJHC——同一字段不可能同时拥有两个不同的值,所以查询自然返回空结果。你要找的是同一个客户分别参加了这两个旅行团的记录,需要换一种写法。
解决方案
以下是几种可行的写法:
方法1:分组统计法(推荐)
通过分组客户ID,筛选出同时包含两个旅行团的记录:
SELECT c.LastName, c.FirstName FROM tbl_Customers c INNER JOIN tbl_Tour_Bookings tb ON c.CustomerID = tb.CustomerID WHERE tb.TourID IN ('20WJHC', '24WJHC') GROUP BY c.CustomerID, c.LastName, c.FirstName HAVING COUNT(DISTINCT tb.TourID) = 2;
- 用
IN先筛选出两个旅行团的所有预订记录 - 按客户分组后,用
HAVING COUNT(DISTINCT tb.TourID) = 2确保客户同时参加了这两个团
方法2:自连接法
将预订表和自身连接两次,分别匹配两个旅行团:
SELECT c.LastName, c.FirstName FROM tbl_Customers c INNER JOIN tbl_Tour_Bookings tb1 ON c.CustomerID = tb1.CustomerID INNER JOIN tbl_Tour_Bookings tb2 ON c.CustomerID = tb2.CustomerID WHERE tb1.TourID = '20WJHC' AND tb2.TourID = '24WJHC';
- 每个连接对应一个旅行团的预订记录,确保同一个客户存在两条不同的预订记录
方法3:子查询法
先筛选出参加第一个团的客户,再从中筛选参加第二个团的:
SELECT LastName, FirstName FROM tbl_Customers WHERE CustomerID IN ( SELECT CustomerID FROM tbl_Tour_Bookings WHERE TourID = '20WJHC' ) AND CustomerID IN ( SELECT CustomerID FROM tbl_Tour_Bookings WHERE TourID = '24WJHC' );
- 两个子查询分别找出参加对应旅行团的客户ID,取交集就是同时参加两个团的客户
内容的提问来源于stack exchange,提问作者John C
相关产品推荐
相关产品推荐

