простой SQL-запрос - PullRequest
       8

простой SQL-запрос

0 голосов
/ 27 ноября 2009

У меня есть 3 таблицы следующим образом.

salesman(sid,sname)
location(lid,lname)
sales_loc(sid,lid)

Теперь я хочу напечатать sid и sname продавца, который посетил все локации. Я хочу запрос SQL и не хочу код PL / SQL.

Ответы [ 6 ]

7 голосов
/ 27 ноября 2009
select sid, sname from salesman
where not exists 
        (select 1 from location
          where not exists
                  (select 1 from sales_loc
                    where sid=saleman.sid 
                     and lid = location.lid));
4 голосов
/ 27 ноября 2009

Другой подход:

select sid, sname from salesman
where
  (select count(*) from location) =
  (select count(*) from sales_loc where sales_loc.sid = salesman.sid)

Edit: В случае, если пара sales_loc(sid,lid) не является ключом, ниже подходит запрос
как предложил ammoQ:

select sid, sname from salesman
where
  (select count(*) from location) =
  (select count(distinct lid) from sales_loc where sales_loc.sid = salesman.sid)
0 голосов
/ 28 ноября 2009

продавец (с.и.д., SNAME) расположение (крышка, LNAME) sales_loc (с.и.д., крышка)

выберите s.sid, s.sname у продавца s, местоположение l, sales_loc sl где s.sid = sl.sid и l.lid = sl.lid

0 голосов
/ 27 ноября 2009

Это должно работать. Я попробовал это.

select a.sid, a.salesman, count(a.sid) as total from salesman a
inner join sales_loc b on b.sid = a.sid
inner join location c on c.lid = b.lid
group by a.sid, a.salesman
having count(a.sid) = (select count(*) from location)

Для сравнения используется общее количество мест.

0 голосов
/ 27 ноября 2009

Еще один горшок!

Учитывая этих продавцов и их территории ...

SQL> select s.sname, l.lname
  2  from   salesman s
  3         , location l
  4         , sales_loc sl
  5  where  sl.sid = s.sid
  6  and sl.lid = l.lid
  7  order by s.sid, l.lid
  8  /

SNAME      LNAME
---------- ----------
FOX        TRAIN
FOX        BOAT
KNOX       BOAT
KNOX       HOUSE
SAM        TRAIN
SAM        BOAT
SAM        HOUSE

7 rows selected.

SQL>

... этот запрос извлекает того, кто их всех посетил ...

SQL> select s.sname
  2  from   salesman s
  3  where s.sid not in  (
  4      select sid from (
  5          select cjs.sid, cjl.lid
  6          from   salesman cjs
  7                 cross join location cjl
  8          minus
  9          select sl.sid, sl.lid
 10          from   sales_loc sl
 11      )
 12  )
 13  /

SNAME  
------ ----
SAM

SQL>
0 голосов
/ 27 ноября 2009

Получить все записи продавца, где количество посещенных мест равно количеству мест.

select sm.* from salesman as sm
where (select count(sl.*) from sales_loc as sl where sl.sid = sm.sid)
 = (select count(l.*) from location as l);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...