MySQL返回匹配多行的ID列表
我得到了以下表格模式和值: 我想要实现的是获得与多个标准匹配的提供者id(id\u provider)的列表,例如:MySQL返回匹配多行的ID列表,mysql,database,search,join,Mysql,Database,Search,Join,我得到了以下表格模式和值: 我想要实现的是获得与多个标准匹配的提供者id(id\u provider)的列表,例如: 我想通过id_attribute=71和值3400进行搜索,还想通过id_attribute=70过滤该表,该值为4300。返回提供程序列表应为:(2) Next search-id_attribute=72,并且过滤后的值介于200和700之间,因此它应该返回等于(2,3)的提供者列表 这种结构可能吗?在第一个查询中,where子句类似于。。。其中(id_属性=71和va
- 我想通过id_attribute=71和值3400进行搜索,还想通过id_attribute=70过滤该表,该值为4300。返回提供程序列表应为:(2)
- Next search-id_attribute=72,并且过滤后的值介于200和700之间,因此它应该返回等于(2,3)的提供者列表
这种结构可能吗?在第一个查询中,where子句类似于
。。。其中(id_属性=71和value=“3400”)和(id_属性=70和value=“4300”)代码>
在第二个示例中,您必须使用BETWEEN。。。其中id_属性=72,值介于(200700)之间代码>
您可能还必须使用选择不同的id\u提供者
,这样您就不会得到多个相同的id。第一次搜索:
SELECT your_fields
FROM your_table
WHERE ((id_attribute = 71 AND value = 3400) AND (id_attribute = 70 AND value=4300))
第二次搜索:
SELECT your_fields
FROM your_table
WHERE (id_attribute = 72 AND (value BETWEEN 200 AND 700) )
我用了很多括号让您看到“逻辑”细分。其他答案都是正确的bt kamil您的值字段看起来像varchar…您不能用“between”表示varchar
你只能在范围内使用它…即。在某个日期或数字之间 您正在组合来自不同行的值,因此请考虑按
分组和拥有
。您的第一个查询是:
select id_provider
from
group by id_provider
having max(id_attribute = 71 and value = '3400') > 0 and
max(id_attribute = 70 and value = '4300') > 0;
第二点:
select id_provider
from
group by id_provider
having max(id_attribute = 72 and value between '200' and '700') > 0;
注意,引号是因为value列实际上是一个字符串。如果需要数字比较,则可能需要将其转换为数字。是,这是可能的。到目前为止,您编写了什么查询?我尝试使用GROUP BY id_provider和HAVING子句,但没有得到预期的结果。根据问题和下面的评论,您想要的结果很难理解。我建议你找到一种方法来重新措辞,这可能会让你更清楚地了解你想做什么。不完全是这样,对于第一个你只搜索一个属性的方法,我想同时使用两个属性(71和70)(或者更多属性)进行筛选。对不起,我读得太快了,跳过了一行,听起来您必须使用或,但如果我使用或,即使只有一个条件匹配,我也会得到结果。如果我使用,则不会返回任何结果。如果使用,则不会返回带括号的结果;括号内的两个条件都必须为true才能返回true(使用和)。看看这个:我知道它们都应该是真的,但是当我尝试搜索两个属性和值时,结果是空的。只有当我使用或它工作,但结果是不好的,因为它返回提供者id,即使只有一个标准匹配,而不是两者都匹配。第一次搜索不起作用,已经尝试过了,但我认为它不是那么简单。我认为在一个WHERE子句中不能使用两个id_属性。太好了,这正是我想要的。非常感谢你的回答。