我试图简单地查询数据,
select * from product where (color='blue' or type='suv')
我想要查询中提到的任何具有“颜色”和“类型”的特定数据,但如果我没有提及他“类型”那么它将仅从“颜色”获取数据。
例如:
product color type
toyota red suv
honda black
select * from product where (color='blue' or type Is null)
在第二次查询中,它返回“丰田”和“本田”。
我需要的是获得产品,如果我给它的“颜色”值然后它只返回数据的颜色,如果我给它的“颜色”和“类型”值然后根据这两个值返回数据?
答案 0 :(得分:1)
如果我理解正确,如果同时填写了$1
和$2
,那么您希望将它们视为or
。如果只有一个,那么你只需要那个。
这应该实现这个逻辑:
where (color = $1 and $1 <> '') or (type = $2 and $2 <> '')
但是,如果您的表很大,我建议您将最简单的where
子句放在一起。因此,使用python逻辑构造其中一个:
where color = $1
where type = $2
where color = $1 or type = $2
前两个(至少)可以利用适当的索引。
答案 1 :(得分:0)
要么...... 返回与该颜色和类型匹配的任何内容,或者如果没有类型传递给查询,则匹配颜色的所有内容:
select * from product where color=$1 and (type=$2 or $2='')
或... 会返回与颜色和类型匹配的内容以及未指定类型的产品:
select * from product where color='blue' and (type='suv' or type is null)
......这取决于你想要回来的东西。
如果传入或不传入颜色和类型,并且您想在查询中使用,那么:
select * from product where (color=$1 or $1='') and (type=$2 or $2='')