多行输出重复错误数据

时间:2012-12-13 16:14:23

标签: sql oracle operators

我正在尝试使用运算符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%'

我尝试在ANDOR周围添加括号,但这似乎不起作用。我假设它与我在第一行中编写列的方式有关,但我不确定。如果是这种情况,有人可以解释为什么会发生这种情况,我会讨厌再次遇到这个问题。提前感谢所有答案。

4 个答案:

答案 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')