mysql用in替代方法_mysql – SQL:根据*不同*行的值选择行的“NOT IN”替代方法

如何创建SQL语句,返回由子查询修改的结果,还是返回处理您要返回的信息的联接(或其他)?

例如:

CREATE TABLE bowlers (

bowling_id int4 not null primary key auto_increment,

name text,

team text

);

有人可能错误地在多个团队中:

INSERT INTO `bowlers` (`name`, `team`) VALUES

('homer', 'pin pals'),

('moe', 'pin pals'),

('carl', 'pin pals'),

('lenny', 'pin pals'),

('homer', 'The homer team'),

('bart', 'The homer team'),

('maggie', 'The homer team'),

('lisa', 'The homer team'),

('marge', 'The homer team'),

('that weird french guy', 'The homer team');

所以他们不能决定他的团队,所以他在两个. Do’h!

我想知道每个人,谁也不在pin pals团队的团队.我能做的最好的就是这样

SELECT a.name, a.team

FROM bowlers a where a.team = 'The homer team'

AND a.name

NOT IN (SELECT b.name FROM bowlers b WHERE b.team = 'pin pals');

导致:

+-----------------------+----------------+

| name | team |

+-----------------------+----------------+

| bart | The homer team |

| maggie | The homer team |

| lisa | The homer team |

| marge | The homer team |

| that weird french guy | The homer team |

+-----------------------+----------------+

5 rows in set (0.00 sec)

哪个,你知道,辉煌!

性能将受到影响,因为子查询将针对查询的每个结果运行,这是B到A到D.很好的几行,对于数十万行来说是不好的.

什么是更好的方法?我主要是认为自我加入会做这个伎俩,但是我不能包围我的头脑如何做到这一点.

有没有其他方法可以做到这一点,而不使用NOT IN(SELECT …)

此外,这种类型的问题的名称是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值