1

我的目标是返回在旧金山和洛杉矶都有员工的公司名称列表。到目前为止,这是我的查询以及架构:

select distinct company_name
  from Works natural join Employee
where city = 'San Fran' or city = 'LA';

create table Employee(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    gender      char(1),
    street      varchar(10),
    city        varchar(10),
    primary key(Lastname, FirstName, MidInitial));

create table Works(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    company_name    varchar(20),
    salary      numeric(8,2),
    primary key(Lastname, FirstName, MidInitial, company_name),
    foreign key(Lastname, FirstName, MidInitial) references Employee,
    foreign key(company_name) references company);

我知道现在,我的查询正在返回所有员工的公司列表,这些公司的员工要么住在旧金山,要么住在洛杉矶,或者两者兼而有之……在 where 上同时使用 AND 和 OR 的方法是什么条款,以便只获得在两个城市都有员工的公司?

谢谢!

4

2 回答 2

2

您想要的是这两个子集的自然交集。这是实现此目标的 SQL :)

select distinct company_name
  from Works natural join Employee
where city = 'San Fran';
intersect
select distinct company_name
  from Works natural join Employee
where city = 'LA';
于 2013-09-18T11:56:29.003 回答
1
select distinct company_name
from Works natural join Employee
where city = 'San Fran'
and company_name in 
(
    select company_name
    from Works w natural join Employee e
    where city = 'LA'
    group by company_name
)

这可能会奏效。

于 2013-09-18T11:46:30.817 回答