У меня есть 3 таблицы следующим образом.простой запрос sql
salesman(sid,sname)
location(lid,lname)
sales_loc(sid,lid)
Теперь я хочу распечатать сид и змею салмана, который посетил все места. Я хочу SQL-запрос, и мне не нужен код PL/SQL.
У меня есть 3 таблицы следующим образом.простой запрос sql
salesman(sid,sname)
location(lid,lname)
sales_loc(sid,lid)
Теперь я хочу распечатать сид и змею салмана, который посетил все места. Я хочу SQL-запрос, и мне не нужен код PL/SQL.
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));
Другой подход:
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)
Получить все реквизиты продавца, где количество посещенных мест равно количеству мест ЦИИ.
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);
Еще один для горшка!
Учитывая эти продавцы и их территории ...
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>
Это должно работать. Я попробовал.
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)
В нем используется общее количество мест для сравнения.
продавец (SID, SNAME) расположения (крышка, LNAME) sales_loc (SID, крышка)
выберите s.sid, s.sname из продавцов с, расположением л, sales_loc сл где s.sid = sl.sid и l.lid = sl.lid
Я собирался угадать домашнюю работу. Но домашнее задание редко включает в себя программное обеспечение, такое как Oracle ... – Joey
Ну, теперь есть экспресс-версия;) – MartW
Возможно, что-то пошло «нахальство» над моей головой, но мне сложно понять, что вы просите. Как эти две таблицы связаны каким-либо образом? – Greg