Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较和条件中的两行_Sql_Compare_Rows - Fatal编程技术网

Sql 比较和条件中的两行

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

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

我有以下表格结构:

idcompany,cloudid,cloudkey,idsearchfield,类型,userValue

现在我执行以下语句:

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,因为我认为您编辑的问题是正确的