我有以下4张桌子:
create table Productgroup
(
productgroup_id char(4) primary key,
productgroupName varchar(25) not null
)
create table Product
(
product_id char(4) primary key,
productName varchar(25) not null,
product_productgroup_id char(4)
constraint product_productgroup_id_foreign
foreign key references Productgroup(productgroup_id)
)
create table Pricelist
(
pricelist_id char(4) primary key,
pricelistName varchar(25) not null
)
create table Productprice
(
productprice_id int identity(1000, 1) primary key,
price int not null,
discount decimal(10,2),
product_productprice_id char(4)
constraint product_productprice_id_foreign
foreign key references Product(product_id),
pricelist_productprice_id char(4)
constraint pricelist_productprice_id_foreign
foreign key references Pricelist(pricelist_id)
)
每个产品都有一个产品组,可以包含在具有不同价格的不同价格清单中。
到目前为止,我有2个价目表,一个价目表称为“商店”,一个价目表称为“星期五吧”。我想进行查询,以显示价格表“星期五酒吧”中未包含该产品的产品和产品组。
到目前为止,我有以下代码:
SELECT
Productgroup.productgroupName, Product.productName
FROM
Product
JOIN
Productgroup ON Product.product_productgroup_id = Productgroup.productgroup_id
JOIN
Productprice ON Product.product_id = Productprice.product_productprice_id
JOIN
Pricelist ON Productprice.pricelist_productprice_id = Pricelist.pricelist_id
WHERE
Pricelist.pricelistName != 'Friday bar'
但是此查询的问题在于它同时显示了星期五栏中包含的产品和星期五栏中未包含的产品。但是,仅显示价格表“星期五酒吧”中的产品。但是应该只显示那些不在价目表“星期五栏”中的产品。
任何帮助将不胜感激!
答案 0 :(得分:1)
是的,如果您加入,则无法将其排除在其他价目表中,因为每个价目表都会有一行。相反,您必须专门检查该价目表中的价格是否存在,例如
SELECT PG.productgroupName, P.productName
FROM Product P
INNER JOIN Productgroup PG ON P.product_productgroup_id = PG.productgroup_id
where not exists (
select 1
from Productprice PP
inner join Pricelist PL ON PP.pricelist_productprice_id = PL.pricelist_id
where P.product_id = PP.product_productprice_id
and PL.pricelistName = 'Friday bar'
)
答案 1 :(得分:0)
您可以使用left join
:
SELECT Productgroup.productgroupName, Product.productName
FROM Product JOIN
Productgroup
ON Product.product_productgroup_id = Productgroup.productgroup_id JOIN
Productprice
ON Product.product_id = Productprice.product_productprice_id JOIN
Pricelist
ON Productprice.pricelist_productprice_id = Pricelist.pricelist_id AND
Pricelist.pricelistName = 'Friday bar'
WHERE Pricelist.pricelist_id IS NULL;