MySQL返回匹配多行的ID列表

时间:2013-07-16 12:29:56

标签: mysql database search join

我有以下表格架构和值:

Table structure and values

我想要实现的是获取匹配多个标准的提供者ID(id_provider)列表,例如:

  • 我想通过id_attribute = 71和值3400进行搜索,并希望通过id_attribute = 70过滤该表,其值为4300.返回提供者列表应为:(2)
  • 下一个搜索 - id_attribute = 72且过滤后的值介于200和700之间,因此它应该返回等于(2,3)的提供者列表。

这种结构有可能吗?

4 个答案:

答案 0 :(得分:0)

在您的第一个查询中,您的where子句将类似于... WHERE (id_attribute = 71 AND value = "3400") AND (id_attribute = 70 AND value = "4300");

在你的第二个中,你必须使用BETWEEN ... WHERE id_attribute = 72 AND value BETWEEN(200,700);

您可能还必须使用SELECT DISTINCT id_provider,因此您最终不会使用多个相同的ID。

答案 1 :(得分:0)

首先搜索:

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) )

我使用了很多括号让你看到"逻辑"细分。

答案 2 :(得分:0)

其他答案是正确的bt kamil你的值字段看起来像varchar ....你不能使用“之间”为varchar。

你只能用于范围...即。在某个日期之间或数字之间。

答案 3 :(得分:0)

您正在组合来自不同行的值,因此请考虑group byhaving。您的第一个查询是:

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列实际上是一个字符串。如果您需要进行数字比较,则可能需要转换为数字。