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



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

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

如果我理解正确,目标是根据以"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%');
我认为您遇到麻烦的原因是OR的原因。 它真正在做的是 a.empno = b.empno 和 b.empzip 像"1%"或如果 b.empzip 像"8%"是真的,但你真的想要。 a.empno = b.empno 和 (b.empzip Like '1%'

或 b.empzip Like '8%'),所以你只检查邮政编码,如果empno匹配。另一种方式,它将随机员工连接在一起,然后检查他们的邮政编码是否匹配。

括号缺失:

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

建议在 where 子句中使用"OR",因此查询可能非常慢。在您的情况下,您可以使用如下所示的内容:

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

最新更新