我即将构建某种功能或查询,我可以检查数据库中是否已存在某条记录。以下规则适用:
甚至可以构建这样的查询吗?我的目标是拥有一个可以返回true的函数,如果它喜欢传递的对象的行已经存在于数据库中。
我唯一的选择是使用多个where-statements进行查询(我为每个组合尝试 4个不同的值)?
伪:
function getSimilarRow(Row_Object $row)
{
//select *
//from table_x
//where 4 out of 6 properties from object $row apply
}
答案 0 :(得分:1)
您可以在where子句中为您尝试匹配的每个属性使用case statement
。如果它符合标准,则给case语句赋值1
;如果没有,那么给它0
。案件的总和应为>= 4
。
我
select * from SomeTable where
(case when propertyOne = 'value1' then 1 else 0 end) +
(case when propertyTwo = 'value2' then 1 else 0 end) +
(case when propertyThree = 'value3' then 1 else 0 end) +
(case when propertyFour = 'value4' then 1 else 0 end) +
(case when propertyFive = 'value5' then 1 else 0 end) +
(case when propertySix = 'value6' then 1 else 0 end) >= 4
显然,如果您希望它们是like
或其他任何内容,您可以更改每个子句中的逻辑。如果您需要真正有创意,您甚至可以使用1
之外的其他内容对每列进行加权。