如何在Postgres中的WHERE语句中添加WHERE语句?

时间:2012-03-02 18:56:23

标签: sql database postgresql

我想做这样的事情:

CASE WHEN Derp.Herp = 'Nerp' THEN 'Gerp' ELSE NULL ENDS AS Herpty WHERE Herpty IS NOT NULL

我的想法是,我希望在同一个查询中运行,但问题是Postgres通常会告诉我Herpty不存在(可能是因为它是在同一个查询中创建的)也许这是一个约定或解决方案?这里的想法是获取一个Herpty列,排除'Nerp'中不是Derp.Herp的内容,我不希望返回NULL。

更新:到目前为止我得到的答案没有帮助,我的实际查询稍微复杂一点,我不能放入WHERE语句WHERE Derp.Herp <> 'Nerp',因为在我的实际查询中它实际上是通过2列中的WHEN声明,所以它更像是这样的: Derp.Herp = 'Nerp' AND Derp.Burp = 'Durp' THEN 'Gerp'所以,如果我在WHERE子句中添加它会变得模棱两可,WHERE Derp.Herp <> 'Nerp' AND Derp.Burp <> 'Durp'将完全消除Nerp和Durp,即使它们在2列中不匹配,我正在做这个工作一个非盈利的请帮助。

这是我尝试重写代码以更准确地反映它:http://pastebin.com/PgvAFvfq

4 个答案:

答案 0 :(得分:1)

简短回答:不,不完全是。它是一个计算列,在WHERE子句中不可用。但根据你的例子,你可以做一些像

这样的事情
WHERE Derp.Hepr <> 'NERP'

然而,你的整个查询似乎没用。您应该向我们展示您的真实查询。

答案 1 :(得分:0)

您可以稍微重新组织一下您的查询;

SELECT CASE WHEN Derp.Herp = 'Nerp' THEN 'Gerp' ELSE NULL ENDS AS Herpty 
WHERE Herpty IS NOT NULL

相同
SELECT 'Gerp' AS Herpty WHERE Derp.Herp = 'Nerp';

答案 2 :(得分:0)

你试过了吗?

当Derp.Herp ='Nerp'时的情况那么'Gerp'ELSE NULL结束作为Herpty的情况,当Derp.Herp ='Nerp'那么'Gerp'ELSE NULL ENDS不是NULL

答案 3 :(得分:0)

检查一下。我希望它能奏效。

SELECT CASE WHEN Derp.Herp = 'Nerp' AND Derp.Burp = 'Durp' 
            THEN 'Gerp'
FROM (SELECT * FROM YOURTABLE 
               WHERE Derp.Herp <> 'Nerp' AND Derp.Burp <> 'Durp') Derp