0

このクエリを機能させるのに問題があります。実際に OR 演算子と AND 演算子を一緒に使用しようとしていますが、このエラーが発生する理由についての問題を理解できないようです": "expectingABSOLUTE' or ACTION' orADD' or ALL' orALTER' 「」これが私のSQLコードです:

SELECT * 
FROM EDXW ED, TRANSACTION TXN
WHERE ED.LAM_BK like 'TAR%'
AND ED.KEY = TXN.KEY
AND substring(ED.JAM_BK from position('~' in ED.JAM_BK) + 1) = TXN.EBS_ID

(AND ED.CLS_CD IN ('WIS','OP','OPP')
AND TXN.REV_CD IN ('0360','0361')
AND TXN.LS_CTR_CD IN ('548000','552000','552500','553000','553500','554000','555000','555500','558000')
AND ED.SITE_CD = 'X' )

OR

( ED.ED_CLS_CD IN ('WIS','OP','OPP')
AND AND TXN.REV_CD IN ('0350','0311')
AND AND TXN.LS_CTR_CD IN ('548000','558300')
AND LOC.ED_SITE_CD = 'M')

OR

( ED.ED_CLS_CD IN ('WIS','OP','OPP')
AND AND TXN.REV_CD IN ('0350','0311')
AND AND TXN.LS_CTR_CD IN ('549000','557300')
AND LOC.ED_SITE_CD IN ('M','K'));
4

2 に答える 2

3

問題はあなたが言うことだと思います:しかし、あなたはどちらが非常に異なるものであるかa and b and c and d or e or fを言いたいと思います. a and b and c and (d or e or f)f が true または e が true の場合、式全体が true になります。中括弧はそれを明確にします。あなたの選択は次のようになっていると思います:

SELECT * 
FROM EDXW ED, TRANSACTION TXN
WHERE ED.LAM_BK like 'TAR%'
AND ED.KEY = TXN.KEY
AND substring(ED.JAM_BK from position('~' in ED.JAM_BK) + 1) = TXN.EBS_ID
AND
(
 (ED.CLS_CD IN ('WIS','OP','OPP')
 AND TXN.REV_CD IN ('0360','0361')
 AND TXN.LS_CTR_CD IN ('548000','552000','552500','553000','553500','554000','555000','555500','558000') 
 AND ED.SITE_CD = 'X' )

OR

 ( ED.ED_CLS_CD IN ('WIS','OP','OPP')
 AND TXN.REV_CD IN ('0350','0311')
 AND TXN.LS_CTR_CD IN ('548000','558300')
 AND LOC.ED_SITE_CD = 'M')

OR

 ( ED.ED_CLS_CD IN ('WIS','OP','OPP')
 AND TXN.REV_CD IN ('0350','0311')
 AND TXN.LS_CTR_CD IN ('549000','557300')
 AND LOC.ED_SITE_CD IN ('M','K'))
);
于 2013-10-19T18:08:52.303 に答える
3

余分な括弧があるか、および/または欠落しています。問題を示す単純化されたバージョンを次に示します。

SELECT * 
FROM tables
WHERE clause1
(AND clause2)

SQL の観点からは、これは正しくありません。可能な正しいバージョンは

SELECT * 
FROM tables
WHERE clause1
AND (clause2)

SELECT * 
FROM tables
WHERE clause1
OR (clause2)

違いを見ます?括弧グループのステートメント。したがって、次のようなより複雑な式を使用できます。 SELECT * FROM テーブル WHERE 句 1 AND (句 2 または句 3)

重要なのは、括弧内のすべてを 1 つの true/false 値に減らしても、クエリは意味をなさないということです。

于 2013-10-19T17:58:30.843 に答える