很难解释我的意思究竟是什么意思使用单词这么糟糕写一个类似于我现在的查询。
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)。如果那个字段不是我想要的那个(名字!=约翰)那么就不需要条件(姓氏可以是任何东西) 这段代码适用但对我来说似乎是一种黑客攻击。我的问题是,如果这可以更容易或更漂亮地完成?在此先感谢:)
答案 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'