0

我有一个名为属性的表:

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 这是错误的。

谢谢。

4

6 回答 6

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)

请参阅带有演示的 SQL Fiddle

于 2012-09-17T10:22:01.097 回答
3

假设不能有相同type值的多行相同attributeid,我认为这样的事情是合适的:

select attributeid
from attribute
where type in (1,2)
group by attributeid
having COUNT(*) = 2

这实际上是在询问查询(没有GROUP BYand HAVING)是否为相同的 生成了两行attributeid。如果您添加另一个类型值,这很容易扩展:

select attributeid
from attribute
where type in (1,2,6)
group by attributeid
having COUNT(*) = 3

并且通常被称为关系划分。

于 2012-09-17T10:33:06.237 回答
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);
于 2012-09-18T08:38:45.807 回答
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)
于 2012-09-17T10:21:54.197 回答
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)
于 2012-09-17T10:32:47.850 回答
-2

也许更像是:

从属性中选择attributeid where (type = 1) and (type = 2)

于 2012-09-17T10:21:54.587 回答