oracle查询 - 附加条件取决于字段

时间:2014-01-09 21:33:25

标签: sql oracle

很难解释我的意思究竟是什么意思使用单词这么糟糕写一个类似于我现在的查询。

SELECT * 
FROM table t 
WHERE t.something = 'something' 
  AND CASE WHEN t.name = 'john' THEN 'smith' ELSE t.lastname END = t.lastname

基本上取决于字段是否是我想要的(name = john)我想添加另一个条件(lastname = smith)。如果那个字段不是我想要的那个(名字!=约翰)那么就不需要条件(姓氏可以是任何东西) 这段代码适用但对我来说似乎是一种黑客攻击。我的问题是,如果这可以更容易或更漂亮地完成?在此先感谢:)

3 个答案:

答案 0 :(得分:4)

您可以在没有case

的情况下执行此操作
WHERE t.something = 'something' AND
      (t.lastname = 'smith' or t.name <> 'john')

答案 1 :(得分:1)

您可以将整个测试放在CASE语句中:

AND CASE WHEN t.name = 'john' THEN t.lastname = 'smith' ELSE True

(我不太清楚我的Oracle。True可能不是正确的术语。)

现在CASE的结果是真值,而不是要针对t.lastname进行测试的值。

答案 2 :(得分:1)

相当于:

WHERE
  t.name = 'john' AND t.lastname = 'smith' 
  OR t.name <> 'john'
相关问题