【发布时间】:2021-02-17 00:45:22
【问题描述】:
我正在尝试查询 Oracle 数据库上的表。它有 4 列:
- ID(编号)
- 电子邮件(Varchar)
- 电话(Varchar)
- 传真(Varchar)。
ID 是唯一标识符,并且是必需的。剩下的 3 列可以有一个值,可以是 NULL,也可以是一个空字符串。所以,类似:
| ID | EMAIL | PHONE | FAX |
| -- | ----------- | ------------ | -------------- |
| 10 | na@na.ca |888-888-8888 | NULL |
| 11 | |NULL | |
| 12 | buiness@biz.ca | | 666-666-6666 |
| 13 | |NULL | 555-555-5555 |
| 14 |NULL | | NULL |
| 15 |NULL |222-222-2222 | NULL |
我正在尝试构建一个查询,该查询仅消除跨 EMAIL、PHONE 或 FAX 没有实际值的行(即不包含电子邮件地址、电话号码或传真号码的行)。上表中的示例是 ID 为 11 和 14 的行。因此,如果至少有一个或全部电子邮件、电话或传真,我想在我的查询中包含这些行。
我玩过几个查询,但似乎无法得到我想要的结果。我原以为这会很容易,但也许现在已经很晚了。我的查询的最新版本是这样的:
SELECT c.id, c.email, c.fax, c.phone
FROM
table c
where
(c.email is not NULL or c.email <> '') or
(c.fax is not NULL or c.fax <> '') or
(c.phone is not NULL or c.phone <> '')
上面的查询似乎只导致具有所有 3 个值的行。我用一些'where not'子句和'or's'和'and's'的混合对查询进行了一些修改,但是我没有得到我想要的。任何帮助将不胜感激。
【问题讨论】:
-
我对这个问题有点困惑。 Oracle 将空字符串和 NULL 值视为相同。 “NULL”真的是
'NULL'吗? -
@Gordon Linoff 您过去回答过我的一个或两个问题,并且似乎总是能提供很好的洞察力。我在我的一个专栏(即 TRIM(c.email) IS NULL )上测试了你的理论,发现许多“空”单元格中有很多空格,这解释了为什么我的查询没有得到响应那。谢谢你的建议。如果您使用删除空格的选项提交我的问题的答案,我将接受答案并投票。干杯。
标签: sql oracle multiple-columns