选择连接记录,其中所有行的字段等于false

时间:2012-11-29 12:07:57

标签: sql ms-access

我有两个表:客户和地址。只能有1个客户记录,但客户可能有多个地址。每个地址都有一个名为“active”的真/假字段。

我正在尝试设计一个查询,选择任何没有活动地址的客户。因此,地址记录的客户都标记为“active = false”,或者根本没有地址记录。

我正在使用Access,因此SQL需要MS友好。但是我有兴趣知道一般的SQL技术来做这种选择。

编辑: 表结构

客户

CustomerID,CustomerName,CustomerDoB

地址

AddressID,AddressName,AddressPostcode,CustomerID,Active

3 个答案:

答案 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。