我想请你帮我解决问题
我目前有SQL表PRODUCT
和PRODUCT_PARAMETER
。
PRODUCT
有一个有趣的字段:PRODUCT_ID
(以及其他一些,不重要)。
PRODUCT_PARAMETER
与PRODUCT
上的PRODUCT_ID
相关联,并且列KEY
和VALUE
。
我需要查找所有没有PRODUCT_PARAMETER
关键字“费用”的产品,或者他们有参数但价值为NULL
。可以PRODUCT_PARAMETER
使用不同的密钥
另外,由于我使用它的系统的限制,我无法改变数据库的结构,必须在一个SQL命令中执行,后者可能会给我带来最大的痛苦,因为我对能够相当自信从DB中拉出我需要的一半
SELECT PRODUCT_ID FROM PRODUCT MINUS
SELECT PRODUCT_ID FROM PRODUCT_PARAMETER WHERE KEY LIKE 'cost';
提取没有参数的产品
SELECT PRODUCT_ID FROM PRODUCT_PARAMETER WHERE KEY LIKE 'cost' AND VALUE IS NULL
用于在现有密钥中提取具有NULL值的产品。
在顶层,我需要将这两个结果放入单个sys_refcursor中,这个蓝图就像这样定义了
FUNCTION VALIDATION_FCTN RETURN SYS_REFCURSOR IS
v_rc sys_refcursor;
BEGIN
OPEN v_rc FOR #fillSelectStatementHere;
RETURN v_rc;
END;
只要它返回单个refcursor中的所有值,我可以稍微修改一下,以防合并游标优于SELECT
语句。虽然我对SQL编程非常新鲜,之前从未见过PLSQL
,所以如果可能的话,我更喜欢SELECT
解决方案。
提前谢谢
答案 0 :(得分:0)
所以你需要摆脱没有成本的产品:
SELECT PRODUCT_ID
FROM PRODUCT
MINUS
SELECT PRODUCT_ID
FROM PRODUCT_PARAMETER
WHERE KEY = 'cost' AND VALUE IS NOT NULL
答案 1 :(得分:0)
替代方案,可能会产生更好的计划:
SELECT P.PRODUCT_ID
FROM PRODUCT P
LEFT OUTER JOIN PRODUCT_PARAMETER PP
ON PP.PRODUCT_ID = P.PRODUCT_ID
AND PP.KEY = 'cost'
WHERE PP.VALUE IS NULL
如果没有带有键PP.VALUE
的产品参数,并且当参数确实存在时, 'cost'
将为null,但该值为空。
假设:
PRODUCT (PRODUCT_ID)
是唯一的。PRODUCT_PARAMETER (PRODUCT_ID, KEY)
是唯一的。