在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比较,但它不会以这种方式解决。
我希望我的问题很明显: - )
答案 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
)。它还包括上述idsearchfield
和userValue
列。
您真正想要找到的是那些id
值,其中一行filter_view
有idsearchfield = 4 and compareResearch(userValue,200) = true
而另一行filter_view
有idsearchfield = 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
如果这不能回答您的问题,您将不得不在问题中添加更多信息,包括样本数据和预期结果。