查找承载SALES和TRANSPORT部门的城市名称
我的oracle数据库有这个表
我。)DEPTLOC
//DEPTLOC
CITY DNAME
---------------------
NEWYORK IT
NEWYORK COMPUTER
LONDON Science
LONDON SALES
LONDON TRANSPORT
对于我的SQL select语句
SELECT CITY FROM DEPTLOC
WHERE
DEPTLOC.DNAME='SALES' OR DEPTLOC.DNAME='TRANSPORT'
GROUP BY
CITY
HAVING COUNT(*)=2;
输出始终显示
no rows selected.
我的输出应该是
DNAME
--------
LONDON
答案 0 :(得分:1)
对于这样的事情,我尝试使用简单的连接到同一个表。首先,我会在桌子上有一个索引(City,DName)..然后
select
d.City
from
deptLoc d
JOIN deptLoc d2
on d.city = d2.city
AND d2.dname = 'TRANSPORT'
where
d.dname = 'SALES'
看起来很奇怪,但请想一想。外部WHERE子句仅关注具有一个限定符的城市。为什么甚至计算那些甚至没有那个的城市。所以,现在加入。由于您知道SALES上的第一个限定符已被覆盖,因此请重新加入dept loc表,但是在相同的城市名称上,第二个实例也是您的' TRANSPORT'零件。您会惊讶于它的速度有多快,特别是在大型数据集上。
答案 1 :(得分:0)
SELECT CITY FROM DEPTLOC
WHERE
trim(DEPTLOC.DNAME)='SALES' OR trim(DEPTLOC.DNAME)='TRANSPORT'
GROUP BY
CITY
HAVING COUNT(*)=2;
我认为在您的数据中,您有一些不同的字符,例如 space 或 new lines
你可以检查一下
答案 2 :(得分:0)
我认为这可能是一个更好的查询。
SELECT CITY
FROM DEPTLOC
WHERE
DEPTLOC.DNAME in ('SALES','TRANSPORT')
GROUP BY CITY