我有两个表:客户和地址。只能有1个客户记录,但客户可能有多个地址。每个地址都有一个名为“active”的真/假字段。
我正在尝试设计一个查询,选择任何没有活动地址的客户。因此,地址记录的客户都标记为“active = false”,或者根本没有地址记录。
我正在使用Access,因此SQL需要MS友好。但是我有兴趣知道一般的SQL技术来做这种选择。
编辑: 表结构
CustomerID,CustomerName,CustomerDoB
AddressID,AddressName,AddressPostcode,CustomerID,Active
答案 0 :(得分:3)
select customer_id
from customers c
where not exists (select 1
from addresses a
where a.customer_id = c.customer_id
and a.active = true
)
答案 1 :(得分:2)
这应该指向正确的方向,没有表格模式我做了一些假设:
SELECT * FROM Customers
WHERE ID Not In (SELECT CustomerID FROM Addresses WHERE Active = -1)
这假定客户表中的ID和地址表中的CustomerID
答案 2 :(得分:1)
这适用于Ms-Access:
SELECT Customers.*
FROM Customers LEFT JOIN Addresses ON (Customers.customer_id = Addresses.customer_id AND Addresses.Active = TRUE)
WHERE Addresses.customer_id is null
使用左连接我正在选择所有客户,我正在尝试使用地址表中的活动地址加入每个客户。如果连接不成功,Addresses.customer_id将为null。