我有一个名为attribute的表:
id attributeid type
1 8 2
2 8 1
3 4 1
那么如何选择同时具有2和1类型的attributeid。在这种情况下,只有属性8被限定为。
select attributeid
from attribute
where type in (1,2)
这不会产生我想要的结果,因为它返回4,8这是错误的。
感谢。
答案 0 :(得分:5)
您可以使用以下内容:
select t1.attributeid
from yourtable t1
where type = 1
and exists (select type
from yourtable t2
where t1.attributeid = t2.attributeid
and t2.type = 2)
答案 1 :(得分:3)
如果同一type
不能有多个具有相同attributeid
值的行,我认为这样的话是合适的:
select attributeid
from attribute
where type in (1,2)
group by attributeid
having COUNT(*) = 2
有效地询问查询(没有GROUP BY
和HAVING
)是否为同一attributeid
生成了两行。如果添加其他类型值,则可以轻松扩展:
select attributeid
from attribute
where type in (1,2,6)
group by attributeid
having COUNT(*) = 3
通常被称为关系师。
答案 2 :(得分:1)
将来你可能有这样一行:
id attributeid type
1 8 3
1 8 4
然后你会再次改变你的查询以满足这个条件吗??? 喜欢
where type in(1,2,3,4)
要使其成为通用查询,您可以尝试
select attributeid
from attribute
where type in (select unique(type) from attribute)
group by attributeid
having COUNT(*) = (select count(unique(type)) from attribute);
答案 3 :(得分:0)
如果您的表名为attribute
,则每个属性只能出现一次。它不应该被命名为attributetype
或其他什么吗?
反正:
select
*
from
Attribute t
where
exists (
select * from Attribute t1
where t1.AttributeId = t.AttributeId and t1.Type = 1) and
exists (
select * from Attribute t1
where t1.AttributeId = t.AttributeId and t1.Type = 2)
答案 4 :(得分:0)
您可以尝试使用
SELECT A.attributeid
FROM Table A
WHERE type = 1
AND EXISTS (SELECT type FROM Table B WHERE A.attributeid = B.attributeid AND B.type = 2)
答案 5 :(得分:-2)
可能更像是什么:
从属性中选择attributeid where(type = 1)和(type = 2)