我正在尝试使用运算符LIKE %
在Oracle中执行Select语句,并且出于某种原因,输出行采用了不同人的zipcodes。这是我的代码:
Select Distinct a.empno,a.ename,a.sal,a.job,b.empadr,b.empstate,b.empzip
From EMP a, EMPADDRESS b
Where a.empno = b.empno
And b.empzip Like '1%'
Or b.empzip Like '8%'
我尝试在AND
和OR
周围添加括号,但这似乎不起作用。我假设它与我在第一行中编写列的方式有关,但我不确定。如果是这种情况,有人可以解释为什么会发生这种情况,我会讨厌再次遇到这个问题。提前感谢所有答案。
答案 0 :(得分:1)
如果我理解正确,目标是根据以“1”或“8”开头的邮政编码返回员工详细信息?当你提到应用括号时,它是否像下面一样,应该有用吗?
SELECT Distinct a.empno,a.ename,a.sal,a.job,b.empadr,b.empstate,b.empzip
FROM EMP a, EMPADDRESS b
WHERE a.empno = b.empno
AND (b.empzip Like '1%' OR b.empzip Like '8%');
答案 1 :(得分:1)
我认为你遇到麻烦的原因是OR的原因。它真正做的是a.empno = b.empno和b.empzip喜欢'1%'或者如果b.empzip喜欢'8%'是真的,但你真的想要。 a.empno = b.empno和(b.empzip喜欢'1%'或b.empzip喜欢'8%')所以你只检查邮政编码,如果符合。另一种方式是将随机员工加入,然后检查他们的邮政编码是否匹配。
答案 2 :(得分:0)
缺少括号:
Select Distinct a.empno,a.ename,a.sal,a.job,b.empadr,b.empstate,b.empzip
From EMP a, EMPADDRESS b
Where a.empno = b.empno
And (b.empzip Like '1%' Or b.empzip Like '8%');
或者您可以使用JOIN语法
SELECT Distinct empno,a.ename,a.sal,a.job,b.empadr,b.empstate,b.empzip
FROM emp a JOIN empaddress b USING (empno)
WHERE b.empzip Like '1%' Or b.empzip Like '8%';
答案 3 :(得分:0)
我不建议在where子句中使用“OR”,因此查询可能非常慢。 在您的情况下,您可以使用以下内容:
Where a.empno = b.empno
And substr(b.empzip, 1, 1) in ('1', '8')