简单sql查询
我有以下三张桌子简单sql查询,sql,oracle,Sql,Oracle,我有以下三张桌子 salesman(sid,sname) location(lid,lname) sales_loc(sid,lid) 现在我想打印访问过所有地点的saleman的sid和sname。 我需要SQL查询,而不需要PL/SQL代码。另一种方法: select sid, sname from salesman where not exists (select 1 from location where not exists
salesman(sid,sname)
location(lid,lname)
sales_loc(sid,lid)
现在我想打印访问过所有地点的saleman的sid和sname。
我需要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)
编辑:
如果sales_locsid,lid pair不是密钥,下面的查询更合适,
正如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)
它使用要比较的位置总数。SalesmanID,sname
locationlid,lname
销售地点,盖子
从销售人员s、位置l、销售地点sl中选择s.sid、s.sname
其中s.sid=sl.sid
我正要猜作业。但是家庭作业很少涉及像甲骨文这样的软件……嗯,现在有了一个快速版本;也许有什么事情让我头晕目眩,但我很难理解你在问什么。这两个表是如何链接的?格雷格:sales_loc在sales和location上都有一个外键,因此链接了这两个表:-好的-很抱歉打断了。。。我要去贝多好吧,这很有趣。从来没有想过你可以否定这个说法;很好。是的,我仍在努力想:刘易莎:我去过任何地方,但没有我去过的地方。+1,尽管它做出了一些假设;我将第二个子查询设为select COUNTLID。。。因此,当一名销售人员和一名销售人员在sales_loc中有多个条目时,它仍然有效location@ammoQ,你说得对。我做了那个假设。我将编辑我的答案以包含您的建议。在sqlserver中使用此查询的任何人都应将减号更改为除外。您还应将别名附加到第二个select语句。从中选择ss.sid。。。