我有一张如下表:
Table Value
-----------------------------------------
id attribute1 attribute2 attribute3 active
232 A null B Y
486 null A null N
986 null null null Y
509 B C D N
824 null B C Y
712 A C null N
我需要获取id = 232,824并创建一个这样的查询:
select id
from value
where active = 'Y'
and attribute1 is not null
or attribute2 is not null
or attribute3 is not null
但它不起作用。
我混淆了而没有在条件中使用id。 我需要使用该属性和活动标志创建where条件,(如果所有属性都为null,则只获取id)。
答案 0 :(得分:3)
这很简单:
select count(*)
from t
where attribute1 is not null or attribute2 is not null or attribute3 is not null;
编辑:
您只需要正确的括号:
select count(*)
from t
where active = 'Y' and
(attribute1 is not null or attribute2 is not null or attribute3 is not null);
答案 1 :(得分:0)
你忘了括号
select id from value where active = 'Y'
and (attribute1 is not null or
attribute2 is not null or
attribute3 is not null)
答案 2 :(得分:0)
不使用OR子句的另一种方法可能是
SELECT *
FROM value
WHERE active = 'Y'
AND DECODE(attribute1,NULL,0,1) + DECODE(attribute2,NULL,0,1)+DECODE(attribute3,NULL,0,1)>1;
这是SQL小提琴
答案 3 :(得分:0)
我希望我理解你的问题。
您希望active
等于Y
且所有属性列都不包含null
的所有行。
select *
from value
where active = 'Y'
and attribute1 is not null
and attribute2 is not null
and attribute3 is not null
这将返回您想要的2行(Id 232& 824)。你刚搞砸了和/或。
答案 4 :(得分:0)
您声明您需要一个从测试数据集中提取ID 232和824的查询。
这里是:
select id
from value
where attribute2='B'
or attribute3='B';