首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL单表,按多行选择值

问MySQL单表,按多行选择值
EN

Stack Overflow用户
提问于 2011-06-01 07:33:02
回答 3查看 1.7K关注 0票数 3

从下表中,我如何选择具有特定attributeIds组合的所有animalIds,例如,如果我提供了attributeIds 455和685,我希望返回animalIds 55和93

表名: animalAttributes

代码语言:javascript
复制
id      attributeId     animalId
1       455             55
2       233             55
3       685             55
4       999             89
5       455             89
6       333             93
7       685             93
8       455             93

我有以下查询,似乎可以工作,但是,我不确定是否有更健壮的方法?

代码语言:javascript
复制
  SELECT animalId
    FROM animalAttributes
   WHERE attributeId IN (455,685)
GROUP BY animalId 
  HAVING COUNT(DISTINCT attributeId) = 2;
EN

回答 3

Stack Overflow用户

发布于 2011-06-01 07:37:11

代码语言:javascript
复制
SELECT DISTINCT animalId
FROM animalAttributes
WHERE attributeId IN (455,685)

或

代码语言:javascript
复制
SELECT animalId
FROM animalAttributes
WHERE attributeId IN (455,685)
GROUP BY animalId
票数 1
EN

Stack Overflow用户

发布于 2011-06-01 07:46:33

如果你真的想要准确的结果,你可以使用这样一个简单的方法:

代码语言:javascript
复制
select distinct base.animalId
from animalAttributes base
join animalAttributes a on base.animalId = a.animalId
     and a.attributeId = 455
where base.attributeId = 685

如果您以后需要3个匹配的属性,您只需添加另一个连接:

代码语言:javascript
复制
select distinct base.animalId
from animalAttributes base
join animalAttributes a on base.animalId = a.animalId
     and a.attributeId = 455
join animalAttributes b on base.animalId = b.animalId
     and b.attributeId = 999
where base.attributeId = 685
票数 1
EN

Stack Overflow用户

发布于 2011-06-01 07:47:16

代码语言:javascript
复制
SELECT DISTINCT `animalId` FROM `animalAttributes` WHERE `attributeId` = 455
INTERSECT
SELECT DISTINCT `animalId` FROM `animalAttributes` WHERE `attributeId` = 685
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6194738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档