我有一个名为属性的表:
id attributeid type
1 8 2
2 8 1
3 4 1
那么如何选择同时具有 2 和 1 类型的属性 ID。在这种情况下,只有属性 8 是合格的。
select attributeid
from attribute
where type in (1,2)
这不会产生我想要的结果,因为它返回 4,8 这是错误的。
谢谢。
我有一个名为属性的表:
id attributeid type
1 8 2
2 8 1
3 4 1
那么如何选择同时具有 2 和 1 类型的属性 ID。在这种情况下,只有属性 8 是合格的。
select attributeid
from attribute
where type in (1,2)
这不会产生我想要的结果,因为它返回 4,8 这是错误的。
谢谢。
你可以使用这样的东西:
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)
假设不能有相同type
值的多行相同attributeid
,我认为这样的事情是合适的:
select attributeid
from attribute
where type in (1,2)
group by attributeid
having COUNT(*) = 2
这实际上是在询问查询(没有GROUP BY
and HAVING
)是否为相同的 生成了两行attributeid
。如果您添加另一个类型值,这很容易扩展:
select attributeid
from attribute
where type in (1,2,6)
group by attributeid
having COUNT(*) = 3
并且通常被称为关系划分。
将来您可能会有这样的一行:
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);
如果您的表名为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)
你可以试试
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)
也许更像是:
从属性中选择attributeid where (type = 1) and (type = 2)