是否有可能在一个select子句中有一个where子句,其中有很多谓词在输出中检索哪一个谓词被评估为true,以及实际元组?
例如,给定此表:
Table person
name age hair_color
Tom 12 Brown
Bob 27 Black
Sam 20 Red
Ann 15 Blonde
John 30 Blonde
该查询:
select *
from person
where (age >= 25) or (hair_color = 'Blonde')
我想输出类似的内容:
name age hair_color clause_1 clause_2
Bob 27 Black true false
Ann 15 Blonde false true
John 30 Blonde true true
你有什么建议来获得类似的结果?
更新
谢谢!你回答了我的问题!所以可以用这样的东西:
select *
from (
select p.*,
(age >= 25) as clause_1,
(hair_color = 'Blonde') as clause_2
from test.person as p
) as t
where t.clause_1 or t.clause_2
现在我有一个相关的。如果我已经有一个易于包含此子句评估的表格,例如' check_1'和' check_2'。
Table person
name age hair_color check_1 check_2
Tom 12 Brown
Bob 27 Black
Sam 20 Red
Ann 15 Blonde
John 30 Blonde
有什么方法可以临时使用'在select查询期间对该字段进行增值(check_1 = clause_1,check_2 = clause_2)?
name age hair_color check_1 check_2
Bob 27 Black true false
Ann 15 Blonde false true
John 30 Blonde true true
我问你,因为我在Java项目中需要它,我在其中使用JPA和Criteria API来进行类型查询,我想得到对象' Person'用'检查'一次性评估价值。
再次感谢大家!
答案 0 :(得分:2)
你可以包装条件:
select *
from (
select p.*,
(age >= 25) as condition_1,
(hair_color = 'Blonde') as condition_2
from person p
) t
where condition_1 or condition_2
以上是标准SQL,并假设使用的DBMS支持正确的boolean
数据类型。
我不确定优化器在降低条件方面有多聪明,所以这可能比原始查询慢。
答案 1 :(得分:1)
类似的东西:
select name, age, hair_color, (age >= 25) AS Clause1, (hair_color like 'Blonde') AS Clause2
from person
where (age >= 25) or (hair_color like 'Blonde')
应该做的。
旁注:like
没有%
很奇怪