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秒:此时,我在这里询问了完整的查询:如果你想帮助,谢谢