1

我有一张如下表:

创建表table1(id整数,名字文本,姓氏文本);

名字姓氏

======== =========
1 本·泰勒
2 抢劫·泰勒
3 抢劫·史密斯
4 抢劫僵尸
5 彼得·史密斯
6 本·史密斯
7 彼得·泰勒

我想选择带有 lastname 的行,其中 lastname 必须由 ben 和 rob 共享,firstnames 必须是 ben 和 rob。
因此在上表中,选择查询的结果必须是:
1 ben taylor
2 rob taylor
3 rob smith
6 ben smith

获得上述结果的 sql 查询必须是什么?
我试过 - select * from table1 as a,table1 as b where a.firstname='ben' and b.firstname='rob' and a.lastname=b.lastname这加入了所有结果行,这不是我想要的。

4

2 回答 2

1

您可以使用两个过滤连接来要求与 Ben 和 Rob 共享姓氏:

select  *
from    Table1 t1
join    Table1 rob
on      rob.firstname = 'rob'
        and t1.lastname = rob.lastname
join    Table1 ben
on      ben.firstname = 'ben'
        and t1.lastname = ben.lastname
where   t1.firstname in ('ben', 'rob')

SQL Fiddle 上的实时示例。

于 2013-01-14T13:16:48.993 回答
0
select * 
from table1 where first_name = 'ben' or first_name = 'rob' 
and last_name 
in (select last_name from table1 where first_name = 'rob' and last_name 
in (select last_name from table1 where first_name = 'ben'))
于 2013-01-14T13:20:10.127 回答