【发布时间】:2015-12-04 03:12:10
【问题描述】:
如果我要问一个转储问题,我真的很抱歉,我正在尝试完成以下任务:“编写查询以仅列出那些从未购买过的产品(p_id、p_name、cat_name)。”
我有 2 张桌子:
-
ProductCategory(p_id, p_name, cat_id, cat_name, cat_description) -
CustomerPreference(cust_id, cust_name, pp_id(purchasedproduct), rating)
所以我尝试编写查询同时执行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),我将不胜感激卖掉了。
【问题讨论】:
-
第一个需要回答的问题..如何识别购买的产品?
-
CustomerPreferences 表中的 pp_id 包含与 PoductCategory 表中的 p_id 相同的值。所以这就是为什么我试图计算我拥有的所有产品 ID,然后比较/减去购买产品的数量
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它
标签: sql sql-server sql-server-2008 count compare