问题描述
|
如何使用AND运算编写一组键值对的SQL查询
例如:
id proc_id code value
1 1 height \"\"
2 1 weight 120
3 1 chin 2
4 1 lower \"\"
5 1 upper 10
我的值是这样的:{weight = 120,lower = 1,height = \“ \”}
我该如何应用AND关系来匹配确切的记录
输出:返回记录-[2,1]-#仅重量和高度匹配。
解决方法
有三种基本方法。
一种是根据需要加入多次:
select n.node_id
from node n
join meta m1 on m1.node_id = n.node_id
and m1.code = \'weight\' and m1.value = \'120\'
join meta m2 on m2.node_id = n.node_id
and m2.code = \'lower\' and m2.value = \'1\'
join meta m3 on m3.node_id = n.node_id
and m3.code = \'height\' and m3.value = \'\'
另一种是分组并计数:
select n.node_id
from node n
join meta m on m.node_id = n.node_id
where m.code = \'weight\' and m.value = \'120\' or
m.code = \'lower\' and m.value = \'1\' or
m.code = \'height\' and m.value = \'\'
group by n.node_id
having count(*) >= 3
最后是避免在不适当的地方使用EAV,并正确规范化您的数据。
, 由于各个值在不同的行中,因此您必须使用OR
查询:
select id,proc_id,code,value
FROM yourtable
WHERE (code=\'HEIGHT\' and value = \'120\') OR
(code=\'lower\' AND value = \'1\') OR
(code=\'height\' AND value= \'\')
, 不确定我是否完全理解,但是如何做:
SELECT * FROM your_table
WHERE weight = 120 AND lower = 1 AND height = \'\'