0

我正在尝试使用运算符在 Oracle 中执行 Select 语句,LIKE %并且由于某种原因,输出行采用了不同人的邮政编码。这是我的代码:

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

4

4 回答 4

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%');
于 2012-12-13T16:23:40.963 回答
1

我认为您遇到麻烦的原因是 OR 的原因。它真正在做的是 a.empno = b.empno And b.empzip Like '1%' 或者 b.empzip Like '8%' 是真的,但你真的想要。a.empno = b.empno and (b.empzip Like '1%' Or b.empzip Like '8%') 所以你只检查邮政编码,如果 empno 匹配。另一种方式是将随机员工连接在一起,然后检查他们的邮政编码是否匹配。

于 2012-12-13T16:24:50.800 回答
0

我不建议在 where 子句中使用“OR”,因此查询可能会很慢。在您的情况下,您可以使用以下内容:

Where a.empno = b.empno
And substr(b.empzip, 1, 1) in ('1', '8')
于 2012-12-13T16:44:10.883 回答
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%';
于 2012-12-13T16:21:52.023 回答