Sql 比较和条件中的两行
只是在SQL中使用AND运算符时遇到问题,因为它返回的结果集为零 我有以下表格结构: idcompany,cloudid,cloudkey,idsearchfield,类型,userValue 现在我执行以下语句:Sql 比较和条件中的两行,sql,compare,rows,Sql,Compare,Rows,只是在SQL中使用AND运算符时遇到问题,因为它返回的结果集为零 我有以下表格结构: idcompany,cloudid,cloudkey,idsearchfield,类型,userValue 现在我执行以下语句: SELECT * FROM filter_view WHERE (idsearchfield = 4 and compareResearch(userValue,200) = true) AND (idsearchfield = 6 and compareRe
SELECT *
FROM filter_view
WHERE
(idsearchfield = 4 and compareResearch(userValue,200) = true)
AND (idsearchfield = 6 and compareResearch(userValue,1) = true)
ComparerSearch只是一个函数,它强制转换userValue并将其与其他值进行比较,如果值等于或大于该值,则返回true。UserValue实际上存储为字符串(这是6年前做出的决定)
好的,我得到一个零结果集,这是因为大括号()中的两个标准都是AND组合的,一行只能有一个idsearchfield,因此其中一个标准不匹配
我该怎么做?我需要数据和比较,但这样不行
我希望我的问题是显而易见的:——)如果你已经认识到这两种情况不可能都是真的,那么用什么方式和比较才是正确的呢
select *
from filter_view
where (idsearchfield = 4 and compareResearch(userValue,200) = true)
OR (idsearchfield = 6 and compareResearch(userValue,1) = true)
这将返回2行(或更多)。或者您是否在寻找某种方法将这两行关联起来,使它们显示为一行
好吧,做一大堆假设,因为你的问题中没有包含足够的信息
filter\u view
返回许多列,其中一列是某种形式的记录标识符(我们称之为ID
)。它还包括前面提到的idsearchfield
和userValue
列
您实际想要查找的是那些id
值,对于这些值,一行filter\u视图
具有idsearchfield=4和compareResearch(userValue,200)=true
,另一行filter\u视图
具有idsearchfield=6和compareResearch(userValue,1)=true
这方面的一般术语是“关系划分”。在这个简单的例子中,假设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
如果这不能回答您的问题,您将不得不在问题中添加更多信息,包括示例数据和预期结果。对不起,我刚才看到我忘记了代码块。一匹没有名字的马显然照顾了它。谢谢为什么用
或
替换和
不起作用?idsearchfield不能同时为4和6,因此不能使用和。你应该用OR来代替…你的问题没有意义。如果idsearchfield
同时为4和6,您怎么可能期望找到行呢?如果您想比较不同的行,您可能需要将表本身连接起来。由于我们不知道确切的语义,特别是键,我们需要更多信息。但客户的要求是,只列出searchfield 4上值大于或等于200的结果,而searchfield 6上只显示值大于或等于1(或两个或100)。这就像一个过滤器。如果我使用OR,它将显示两个结果,即使其中一个条件不匹配:(@Jan-我已经更新了答案-我是否更接近猜测您的要求?@Jan:所以您应该(IMHO)使用SELECT…WHERE(idsearchfield=4和…)UNION ALL SELECT…WHERE(idsearchfield=6和…)
@Marco-这将返回与使用或
@Damien时完全相同的结果,+1,因为我认为您编辑的问题是正确的