这是对的吗?
select * from t1
where nvl(t1.a,t1.b) in (select id from t2 where name = 'Apple')
a,b是t1中来自t2的Id的列。
我希望在t1.a或t1.b
中所有具有“Apple”ID的行如果a为null,则id将在b中。
如果b为null,则id将位于。
中答案 0 :(得分:2)
我希望在t1.a或t1.b
中所有具有“Apple”ID的行
不,这不正确。
您的查询将在t1.a
或id
为t2
且t1.a
为null
时获取t1.b
为id
的行{1}}中的{1}}。
你想:
t2
或:
select *
from t1
where EXISTS ( select 1
from t2
where name = 'Apple'
and ( t1.a = t2.id OR t1.b = t2.id ) )
或(如果您需要在非匹配值中强制执行SELECT *
FROM t1
WHERE a IN ( SELECT id FROM t2 WHERE name = 'Apple' )
OR b IN ( SELECT id FROM t2 WHERE name = 'Apple' )
):
NULL
答案 1 :(得分:1)
这是正确的,但效率低下。 我会写
select * from t1
where t1.a in (select id from t2 where name = 'Apple')
union
select * from t1
where t1.b in (select id from t2 where name = 'Apple')
答案 2 :(得分:0)
如果一条记录中 a 和 b 的值为-9999且app为id,则查询不会返回记录,因为 a < / em>不为null,因此将-9999与苹果ID进行比较,而不是 b 的值
我建议这一点,假设您在 t2 中只有一条代表“Apple”的记录:
if (cognitoUser != null) {
alert(cognitoUser.getUsername());
}
如果您可以在 t2 中创建名为“Apple”的多条记录,那么我会建议:
select *
from t1
where (select id from t2 where name = 'Apple') in (a, b)
答案 3 :(得分:0)
您的问题在评论中描述 - 问题中的逻辑不正确,因为值可能是-9999。你可以做你想做的事情:
UseDefaultCredentials