一个简单的SQL查询?

时间:2012-09-17 10:17:50

标签: sql sql-server

我有一个名为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这是错误的。

感谢。

6 个答案:

答案 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)

请参阅SQL Fiddle with demo

答案 1 :(得分:3)

如果同一type不能有多个具有相同attributeid值的行,我认为这样的话是合适的:

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

有效地询问查询(没有GROUP BYHAVING)是否为同一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)