SQL选择名字并且不包含姓氏匹配

时间:2016-02-29 23:10:29

标签: mysql sql

我有一个包含FirstName和LastName的表。

AllowZeroDateTime

我想选择不包含" Smith"的LastName。如果匹配,请不要使用任何相同的FirstName

输出结果

FirstName   LastName
John        Smith
John        Taylor
Steve       White
Adam        Scott
Jane        Smith
Jane        Brown

通知"约翰泰勒"和" Jane Brown"不在结果中,因为其他John和Jane名字包含Smith。

我目前的查询(包括John Taylor和Jane Brown):

FirstName   LastName
Steve       White
Adam        Scott

4 个答案:

答案 0 :(得分:0)

您需要使用子查询过滤掉姓氏包含史密斯的所有人,如下所述:

select first_name, last_name from person 
where first_name not in ( 
select first_name from person where last_name like '%Smith%');

以下是示例SQL Fiddle

答案 1 :(得分:0)

Select * from Name
where firstName not in 
(Select firstName from Name where lastName like '%Smith%')

答案 2 :(得分:0)

您可以使用not exists

执行此操作
select p.*
from tablPerson p
where not exists (select 1
                  from tablPerson p2
                  where p2.LastName = 'Smith' and p2.FirstName = p.FirstName
                 );

我更喜欢not exists这种类型的查询,因为如果任何名字是NULL,它会有更直观的行为。如果'Smith'的任何名字都是NULL,则not in会返回空集。

答案 3 :(得分:0)

并且只是为了好的衡量......来自Dvořák的新世界交响曲的那些应变在后台播放

SELECT x.* 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.firstname = x.firstname 
   AND y.lastname = 'smith' 
 WHERE y.firstname IS NULL;