0

OracleでOperatorを使用して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%'

の周りに角かっこを追加しようとしまし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%'またはb.empzip Like '8%')なので、empnoが一致する場合にのみ郵便番号を確認します。もう1つの方法では、ランダムな従業員を結合して、郵便番号が一致するかどうかを確認します。

于 2012-12-13T16:24:50.800 に答える
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 に答える
0

where句で「OR」を使用することはお勧めしません。その結果、クエリが非常に遅くなる可能性があります。あなたの場合、あなたは次のようなものを使うことができます:

Where a.empno = b.empno
And substr(b.empzip, 1, 1) in ('1', '8')
于 2012-12-13T16:44:10.883 に答える