Sql 仅选择必须填写两个条件的记录

Sql 仅选择必须填写两个条件的记录,sql,mysql,mysql5,Sql,Mysql,Mysql5,我有这张桌子: id type otherid 1 4 1234 2 5 1234 3 4 4321 正如您所看到的,共有3条记录,其中2条属于OtherID1234,其类型为4和5 最后一条记录属于otherid 4321,并且只有类型4 我需要选择所有仅获取类型4而不获取类型5的其他ID 示例:在此表上选择之后,查询将仅返回记录3 谢谢 地址1: 请考虑从1到20的任何数字。 我只需要得到类型4的otherid,但不需要类型5,除非他们可以有任何其他类型

我有这张桌子:

id type otherid
1   4     1234
2   5     1234
3   4     4321
正如您所看到的,共有3条记录,其中2条属于OtherID1234,其类型为4和5

最后一条记录属于otherid 4321,并且只有类型4

我需要选择所有仅获取类型4而不获取类型5的其他ID

示例:在此表上选择之后,查询将仅返回记录3

谢谢

地址1:

请考虑从1到20的任何数字。 我只需要得到类型4的otherid,但不需要类型5,除非他们可以有任何其他类型

地址2:

使用mysql 5.1,您可以使用not exists子查询:

select  distinct otherid
from    YourTable as yt1
where   yt1.type = 4
        and not exists
        (
        select  *
        from    YourTable as yt2
        where   yt1.otherid = yt2.otherid
                and yt1.type <> yt2.type  -- use this line for any difference
                and yt2.type = 5          -- or this line to just exclude 5
        )

这是一种变通方法

SELECT * FROM (
  SELECT GROUP_CONCAT('|',type,'|') type,other_id FROM table GROUP BY otherid
) t WHERE type LIKE '%|4|%' AND type NOT LIKE '%|5|%'

另一种方法是使用左联接,从中排除类型为4和5的行:

select a.*
from table1 a
    left join table1 b on b.otherid = a.otherid and b.type = 5
where a.type = 4 and b.id is null

你的描述让我有点慌乱。您到底希望查询返回什么?你用的是什么数据库?根据您的描述,查询将是:从type=4的表中选择*,但这与您的示例相冲突您是说您想要所有其他ID值,其中所有具有相同otherid的记录的类型仅为4吗?我是说我想要otherid的类型为4,而不是5+可以找到的任何其他类型子句不起作用,因为除了4和5之外还有许多其他类型,但我只需要得到4的记录,而不是5+的任何其他类型的记录available@yes123:答案已编辑。。。我不确定你是否只想排除5或者基本上不是4的任何东西,所以我把这两行都放在+1中,因为它工作得很好!但我不能接受,因为太贵了。我知道你的意思。。感谢+虽然:如果从where子句中删除并且b.id为null,并将select更改为select*,而不是select a*,您可以看到这是如何工作的。您将看到,类型为4的行分为两类:otherid显示在其他行中的行具有另一种类型,因此b.id不为null;otherid不显示在其他行中且b.id为null。请稍候。。。我在我需要的子查询中尝试了这个查询,但总查询时间超过了50秒:此时,我在这里询问了完整的查询:如果你想帮助,谢谢