Sql 使用错误数据重复多行输出

Sql 使用错误数据重复多行输出,sql,oracle,operators,Sql,Oracle,Operators,我试图在Oracle中使用操作符像%来执行Select语句,出于某种原因,输出行采用了不同人的Zipcode。这是我的密码: 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%' 我尝试在和和或之间添加括号,但似乎没有

我试图在Oracle中使用操作符
像%
来执行Select语句,出于某种原因,输出行采用了不同人的Zipcode。这是我的密码:

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%'

我尝试在
之间添加括号,但似乎没有效果。我假设这与我如何写第一行的专栏有关,但我不确定。如果是这样的话,有人能解释一下为什么会发生这种情况,我不想再遇到这个问题。提前感谢您的回答。

括号缺失:

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%';

若我理解正确,目标是基于zipcodes返回员工详细信息,zipcodes以“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%');

我认为你遇到麻烦的原因是手术室的原因。它真正做的是a.empno=b.empno和b.empzip类似于“1%”,或者如果b.empzip类似于“8%”是真的,但您确实想要。a、 empno=b.empno和(b.empzip类似于“1%”或b.empzip类似于“8%”),因此,如果empno匹配,则只检查邮政编码。另一种方法是将随机的员工连接在一起,然后检查他们的邮政编码是否匹配。

我不建议在where子句中使用“或”,因此查询速度可能非常慢。 在您的情况下,您可以使用以下内容:

Where a.empno = b.empno
And substr(b.empzip, 1, 1) in ('1', '8')

请你举一个你得到的输出的例子好吗?对不起,我不知道如何在这里发布输出。我的问题得到了回答,但如果你想让我在这里为未来的观众发布我以前的(糟糕的)结果,我也可以这样做。看起来我在错误的区域添加了括号(在之前,而不是之后)。我一直看到人们使用连接语法,所以我想我会研究一下使用它的好处。谢谢你的回复!因为它将过滤条件(类似于empzip…)与连接条件(a.empno=b.empno)分开,所以更容易阅读。是的,我在AND之前插入了括号(仍在学习SQL lol),感谢您及时的响应。欢迎您的帮助。学习SQL是我的一个持续目标。好的,我会练习一下,谢谢你的建议。