我有这张桌子:
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
答案 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