1

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

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

我为此在 Access 中工作,因此 SQL 需要对 MS 友好。但是我很想知道进行这种选择的一般 SQL 技术。

编辑:表结构

顾客

CustomerID、CustomerName、CustomerDoB

地址

AddressID、AddressName、AddressPostcode、CustomerID、Active

4

3 回答 3

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
                 )
于 2012-11-29T12:15:20.410 回答
2

这应该为您指明正确的方向,没有表架构我做了一些假设:

SELECT * FROM Customers
WHERE ID Not In (SELECT CustomerID FROM Addresses WHERE Active = -1)

这假定客户表中有一个 ID,地址表中有一个 CustomerID

于 2012-11-29T12:18:08.770 回答
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 将为空。

于 2012-11-29T12:20:06.347 回答