我有如下表模式和值:MySQL的退货单
我想要实现的是让提供商IDS(id_provider)匹配多个,其中列表指标分析,例如:
- 我想通过id_attribute = 71和值3400来搜索,并且还希望过滤通过id_attribute该表= 70哪个值4300返回提供商列表应该是:(2)
- 下一个搜索 - id_attribute = 72,并且过滤的值在200到700之间,所以它应该返回提供者列表等于(2,3)。
这种结构可能吗?
我有如下表模式和值:MySQL的退货单
我想要实现的是让提供商IDS(id_provider)匹配多个,其中列表指标分析,例如:
这种结构可能吗?
您正在合并来自不同行的值,因此请考虑group by
和having
。你的第一个查询是:
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;
注意引号是因为该值列确实是一个字符串。如果您需要数字比较,则可能需要转换为数字。
完美,这是我想要的方式。非常感谢你的回答。 – Kamil
在你的第一个问题时,你的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。
第一个搜索:
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))
我已经使用了许多支架,让你看到的 “逻辑” 分区。
第一次搜索不起作用,已经尝试过,但我认为它不是那么简单。我不能在单个WHERE子句中使用两个id_attributes。 – Kamil
其他答案是正确的bt kamil你的值字段看起来像varchar ....你不能在varchar之间使用“between”。
你可以使用它只能用于范围......也就是说,在某个日期之间或数字之间。
是的,这是可能的。你到目前为止写了什么查询? – codingbiz
我尝试使用GROUP BY id_provider和HAVING子句,但没有得到我所期望的。 – Kamil
根据下面的问题和意见,您期望的结果很难理解。我建议你找到一种重新措词的方法,可以让你更清楚你想要做什么。 – DevlshOne