0
Customer  Table
----------------------
CustomerName
Peter
Sam


Sales Table
-----------------------
ProductName    Customer
Cloth          Peter
Mobile         Peter
Cloth          Sam
Laptop         Sam

期待される結果

Customer
Sam

「モバイル」ではなく「クロス」を購入した顧客として結果が欲しい、私は試しました

select c.CustomerName from Customer c inner join Sales s1 on (s1.customer = c.customername and s1.productname = 'Cloth') inner join Sales s2 on (s2.customer = c.customername and s2.productname != 'Mobile');

ただし、常に両方のエントリを返します

Customer
Peter
Sam
Sam
4

5 に答える 5

2

布を複数回購入した顧客に対して複数の行を取得することに関心がないため、相関サブクエリの方が適しています。

select
  c.CustomerName
from
  Customer c
where
  exists (
    select null
    from   sales
    where  sales.customer = c.customername and
           s1.productname = 'Cloth') and
  not exists (
    select null
    from   sales
    where  sales.customer = c.customername and
           s1.productname = 'Mobile');
于 2013-05-10T12:54:36.830 に答える
0

これを試して:

select c.CustomerName 
from Customer c 
where exists(select 1 from sales s1 where s1.customer = c.customername and s1.productname = 'Cloth')
and not exists (select 1 from sales s2 where s2.customer = c.customername and s2.productname = 'Mobile')
于 2013-05-10T12:53:48.500 に答える
0

まず、データベース スキーマを確認する必要があります。
IDなしで内部結合を行うことはありません。リレーションシップを使用してテーブルを作成してみてください。このような:

create table customer
(
id_customer       int not null,
ds_customername   varchar(80) null,
primary key (id_customer)
)

create table products
(
id_product  int not null,
ds_product  varchar(100) null,
primary key (id_product)
)

create table sales
(
id_sales    int not null,
id_product  int not null,
id_customer int not null,
foreign key (id_product) references products (id_product),
foreign key (id_customer) references customer (id_customer)
)

select  customer.ds_customername
from    customer
        inner join sales (customer.id_customer = sales.id_customer)
        inner join products (products.id_product = sales.id_product)
where   products.ds_product = 'Cloth'

わかりました、これができない場合は、(古い方法で) 次のようにクエリを実行できます。

    select   Customer.customername
    from     Customer
             inner join on (customer.customername = sales.customer)
    where    sales.productname = 'Cloth'

お役に立てれば幸いです。ハグ、ヴィン。

于 2013-05-10T13:07:42.133 に答える