1

顧客と住所の2つのテーブルがあります。顧客レコードは1つしか存在できませんが、顧客が複数の住所を持っている場合があります。各アドレスには、「アクティブ」と呼ばれるtrue/falseフィールドがあります。

アクティブなアドレスを持たない顧客を選択するクエリを設計しようとしています。したがって、すべて「アクティブ= 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はnullになります。

于 2012-11-29T12:20:06.347 に答える