比较AND条件中的两行

时间:2011-05-11 07:59:33

标签: sql compare rows

在SQL中使用AND运算符时遇到问题,因为它返回零结果集。

我有以下表结构:

idcompany,cloudid,cloudkey,idsearchfield,type,userValue

现在我执行以下语句:

SELECT * 
FROM filter_view 
WHERE 
    (idsearchfield = 4 and compareResearch(userValue,200) = true) 
    AND (idsearchfield = 6 and compareResearch(userValue,1) = true)

compareResearch只是一个转换userValue并将其与另一个值进行比较的函数,如果值等于或大于此值则返回true。 UserValue实际上存储为一个字符串(这是6年前作出的决定)

好的,我得到一个零结果集,因为braces()中的两个标准都是AND组合而且一行只能有一个idsearchfield,因此其中一个标准不匹配。

我如何解决这个问题?我需要AND比较,但它不会以这种方式解决。

我希望我的问题很明显: - )

1 个答案:

答案 0 :(得分:1)

如果你已经认识到这两种情况都不可能都是真的,那么AND比较可以用正确的方式进行比较吗?

select * 
 from filter_view 
 where (idsearchfield = 4 and compareResearch(userValue,200) = true) 
   OR (idsearchfield = 6 and compareResearch(userValue,1) = true)

这将返回2行(或更多)。或者您是否正在寻找某种方法来关联这两行,以便它们显示为一行?


好的,所以做出一些假设,因为你的问题中没有包含足够的信息。

filter_view返回多个列,其中一列是某种形式的记录标识符(让我们称之为ID)。它还包括上述idsearchfielduserValue列。

您真正想要找到的是那些id值,其中一行filter_viewidsearchfield = 4 and compareResearch(userValue,200) = true而另一行filter_viewidsearchfield = 6 and compareResearch(userValue,1) = true < / p>

这个词的总称是“关系划分”。在这个简单的例子中,假设id / idsearchfield在此视图中是唯一的,我们可以用以下方法回答:

select id,COUNT(*) 
 from filter_view 
 where (idsearchfield = 4 and compareResearch(userValue,200) = true) 
   OR (idsearchfield = 6 and compareResearch(userValue,1) = true)
 group by id
 having COUNT(*) = 2

如果这不能回答您的问题,您将不得不在问题中添加更多信息,包括样本数据和预期结果。