如果我提出转储问题,我真的很抱歉,我正在尝试执行以下任务:"编写查询以仅列出从未有过的那些产品(p_id,p_name,cat_name)购买&#34。
我有两张桌子:
ProductCategory
(p_id,p_name,cat_id,cat_name,cat_description)CustomerPreference
(cust_id,cust_name,pp_id(purchaseproduct),评级)所以我尝试编写执行COUNT(p_id) FROM ProductCategory
和COUNT(pp_id) FROM CustomerPreference
的查询,以便我可以比较它们并仅列出那些未售出的产品。
SELECT
PC.p_id, PC.p_name, PC.cat_name, COUNT(PC.p_id) AS no_of_purchases
FROM
ProductCategory PC, CustomerPreference CP
WHERE
PC.p_id = CP.pp_id
GROUP BY
PC.p_id, PC.p_name, PC.cat_name, PC.p_id
HAVING
COUNT(CP.pp_id) NOT IN COUNT(PC.p_id)
ORDER BY
no_of_purchases
我知道我的语法在这个查询中是错误的,但我希望你能看到我试图实现的逻辑,如果你能告诉我如何显示不是的产品列(p_id),我将不胜感激。出售。
答案 0 :(得分:0)
要从一个表(ProductCategory
)获取另一个表(CustomerPreference
)中不存在的行,您可以使用NOT EXISTS
:
SELECT pc.*
FROM ProductCategory pc
WHERE
NOT EXISTS(
SELECT 1
FROM CustomerPreference
WHERE pp_id = pc.p_id
)
答案 1 :(得分:0)
从未出现在CustomerPreference表中的产品将是:
SELECT PC.p_id, PC.p_name, PC.cat_name
FROM ProductCategory PC
LEFT JOIN CustomerPreference CP
ON PC.p_id = CP.pp_id
WHERE CP.pp_id IS NULL
ORDER BY PC.p_name