她是我table上的一个样品:
+--------+-------+-----+
| name | value | id |
+--------+-------+-----+
| value1 | 1 | 100 |
| value2 | 2 | 100 |
| value1 | 1 | 200 |
| value2 | 3 | 200 |
| value1 | 1 | 300 |
| value2 | 4 | 300 |
| | | |
+--------+-------+-----+
如何设置sql查询来检索 id
给定值为100 value1 = 1
以及 value2 = 2
?
4条答案
按热度按时间roqulrg31#
按id分组并在having子句中设置条件:
请看演示。
tez616oj2#
如果我理解正确的话
having
子句满足您的要求:hpcdzsge3#
关系分裂的例子。请参见:
如何在多通关系中过滤sql结果
此查询通常比目前所建议的效率更高:
或等效项(导致相同的查询计划):
db<>在这里摆弄
不在查询中强制唯一性(像其他答案一样),因为我假设表中的一个或多个约束已经这样做了。
有一个“覆盖”索引
(name, value, id)
. 优化的索引变化是可能的,这取决于您未公开的表定义。但是如果你有能力改变你的关系设计,首先要重新考虑它。eav模型通常是次优的。请参见:
这个键值的数据库架构有名称吗?
sdnqo3pr4#
从表\u name中选择id,其中值在(1,2)中;
当value列为1或2时,这将从表中检索id列