sql - Null 的关系运算符问题
问题描述
我在插入关系运算符时遇到以下 select 语句未获取数据的问题。
SELECT C.FIRST_NAME, C.LAST_NAME, B.COMPANY,A.ITEMNO, A.REV, A.DESCRIP
FROM ARINVT A
INNER JOIN ARCUSTO B
ON A.ARCUSTO_ID = B.ID
INNER JOIN PR_EMP C
ON B.AR_PR_EMP_ID = C.ID
WHERE A.ARCUSTO_ID = B.ID AND
B.AR_PR_EMP_ID = C.ID AND
A.ONHAND <= 0 AND
A.CUSER7 = 'Y' AND
A.PK_HIDE <> 'Y'
如果我删除语句的最后一行 (A.PK_HIDE <> 'Y'),它将获取我期望看到的数据。PK_HIDE 列中只有 3 个不同的值,“Y”、“N”或 Null。删除最后一行时,我选择了 PK_HIDE = 'N' 的数据集。
我也试过这个说法:
SELECT C.FIRST_NAME, C.LAST_NAME, B.COMPANY,A.ITEMNO, A.REV, A.DESCRIP
FROM ARINVT A
INNER JOIN ARCUSTO B
ON A.ARCUSTO_ID = B.ID
INNER JOIN PR_EMP C
ON B.AR_PR_EMP_ID = C.ID
WHERE A.ARCUSTO_ID = B.ID AND
B.AR_PR_EMP_ID = C.ID AND
A.ONHAND <= 0 AND
A.CUSER7 = 'Y' AND
A.PK_HIDE = 'N' OR A.PK_HIDE IS NULL
该语句似乎被忽略了,因为它使用OR(A.CUSER7 = 'Y')
提取所有数据集。A.PK_HIDE = 'N'
A.PK_HIDE IS NULL
任何帮助表示赞赏。先感谢您。
解决方案
如果您想在第一个查询中正确管理空值,您应该为 PK_HIDE 使用 NVL
SELECT C.FIRST_NAME, C.LAST_NAME, B.COMPANY,A.ITEMNO, A.REV, A.DESCRIP
FROM ARINVT A
INNER JOIN ARCUSTO B
ON A.ARCUSTO_ID = B.ID
INNER JOIN PR_EMP C
ON B.AR_PR_EMP_ID = C.ID
WHERE A.ARCUSTO_ID = B.ID
AND B.AR_PR_EMP_ID = C.ID
AND A.ONHAND <= 0
AND A.CUSER7 = 'Y'
AND NVL(A.PK_HIDE, 'N') <> 'Y'
在第二个中,您必须将 PK_HIDE 的条件包装在 ( )
SELECT C.FIRST_NAME, C.LAST_NAME, B.COMPANY,A.ITEMNO, A.REV, A.DESCRIP
FROM ARINVT A
INNER JOIN ARCUSTO B
ON A.ARCUSTO_ID = B.ID
INNER JOIN PR_EMP C
ON B.AR_PR_EMP_ID = C.ID
WHERE A.ARCUSTO_ID = B.ID
AND B.AR_PR_EMP_ID = C.ID
AND A.ONHAND <= 0
AND A.CUSER7 = 'Y'
AND ( A.PK_HIDE = 'N' OR A.PK_HIDE IS NULL)
如果你不使用 ( A.PK_HIDE = 'N' OR A.PK_HIDE IS NULL)
你的 where 条件相当于
WHERE ( A.ARCUSTO_ID = B.ID
AND B.AR_PR_EMP_ID = C.ID
AND A.ONHAND <= 0
AND A.CUSER7 = 'Y'
AND A.PK_HIDE = )
OR A.PK_HIDE IS NULL
显然会产生错误的结果
推荐阅读
- ansible - json 对象的 Ansible 过滤器
- google-apps-script - 根据数据自动创建工作表
- webix - Webix 控件本地化 Label Caption 阿拉伯语
- c++ - 从 C++ 中的链表中删除最后一个结束节点
- python - 在 python 中检查与 self 的相等性是什么意思?
- android - Android 应用程序链接 - 在浏览器中打开应用程序的 url 而不会触发应用程序链接
- python - 如何通过 Ajax 返回 Django 表单验证错误
- excel - 无法通过 VBA 脚本获取数据
- angular - 有没有像 Angular 8 或 reactjs 中的“removeClippedSubviews”这样的选项来优化 Web 组件的大量内容?
- c# - 无法通过 LoadSceneAsync 加载 EasyAr 场景