我正在网上商店工作。我的客户要求我提供未分配类别的产品列表。我认为这很容易,但看起来并不像预期的那么容易。
我正在查看的两个表是shop_products和shop_products_categories。他们有以下设置:
购买商品
商店产品类别
我试过了
SELECT shop_product_id
from shop_products_categories
WHERE NOT EXISTS (SELECT name from shop_products)
但这似乎只是从类别表中带回了所有ID。
任何帮助或正确方向的观点都将受到赞赏。
这是一个SQL小提琴,here
XEROX产品没有类别。拉链袋的确如此。
答案 0 :(得分:4)
您应该能够返回以下所有不在shop_products_categories
表中的产品:
select p.id, p.name, p.description, p.price
from shop_products p
where not exists (select 1
from shop_products_categories c
where p.id = shop_product_id);
您似乎仍然遇到问题,我怀疑它们与NULL
列中的shop_category_id
值相关。试试这个:
select p.id, p.name, p.description, p.price
from shop_products p
where not exists (select 1
from shop_products_categories c
where p.id = shop_product_id
and c.shop_category_id IS NOT NULL
);
答案 1 :(得分:2)
通过子查询使用NOT EXISTS通常不是很好的性能,但确实有效。更常见的方法是执行LEFT-JOIN并查找NULL(即:不存在)
select
sp.id,
sp.name,
sp.description,
sp.price
from
Shop_Products sp
LEFT JOIN Shop_Products_Categories spc
on sp.id = spc.shop_product_id
where
spc.shop_product_id is null
答案 2 :(得分:1)
使用此查询可能会对您有所帮助
SELECT * FROM shop_products WHERE id NOT IN (SELECT shop_product_id FROM shop_products_categories);
答案 3 :(得分:0)
你可以试试这个,我不确定:
Select id from shopproducts where not exist (select s.id from shopproduct as s inner
joinshop_products_categories)
意味着来自producthop的id不存在于两个表的连接中