SELECT仅记录必须填充两个条件的记录

时间:2011-02-20 21:19:21

标签: sql mysql mysql5

我有这张桌子:

id type otherid
1   4     1234
2   5     1234
3   4     4321

正如您所看到的,有3条记录,其中2条属于“1234”,并且类型为4和5。

最后一条记录属于“4321”的otherid,只有4类型。

我需要选择只有类型4而不是类型5的所有otherid。

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

由于

ADD1:

请注意TYPE可以是1到20之间的任意数字。 我只需要有类型4而不是类型5的otherid(除了它们可以有任何其他类型)

add2:

使用mysql 5.1

3 个答案:

答案 0 :(得分: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
        )

答案 1 :(得分:1)

这是一种解决方法

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

答案 2 :(得分:0)

另一种方法是使用左连接,从中排除同时具有类型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