-1

我有以下表架构和值:

表结构和值

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

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

这种结构有可能吗?

4

4 回答 4

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

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

于 2013-07-16T12:47:40.730 回答
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 列实际上是一个字符串。如果需要数字比较,可能需要转换为数字。

于 2013-07-16T13:50:32.903 回答
0

其他答案是正确的 bt kamil 您的值字段看起来像 varchar ....您不能将“between”用于 varchar。

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

于 2013-07-16T12:59:44.307 回答
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。

于 2013-07-16T12:41:33.437 回答