これには簡単な修正があると確信しています。私は基本的にSQLステートメントを書いた経験がないので、必要なものを取得するためのすべてのコマンド、トリック、または構文を知りません。
組み合わせる必要のある次の2つのSQLSELECT
ステートメントがあり ます。
1:
SELECT
h.jhhold, h.jhjob, h.jhrev, o.jadesc, o.jaoqty, o.jacqty, o.japo, o.javend
FROM
Jhead AS h
LEFT JOIN
jjops AS o ON h.jhjob = o.jajob
WHERE
h.jhpcmp = 0
AND o.jatype = 2
AND o.jacqty < o.jaoqty
AND o.japcmp = 0
AND o.japo = 0
2:
SELECT
h.jhhold, h.jhjob, h.jhrev, o.jadesc, o.jaoqty, o.jacqty, o.japo, o.javend,
p.hdprcd, p.hdrecd, p.hdseq
FROM
Jhead AS h
LEFT JOIN
jjops AS o ON h.jhjob = o.jajob
LEFT JOIN
hpodt AS p ON h.jhjob = p.hdjob
WHERE
h.jhpcmp = 0
AND o.jatype = 2
AND o.jacqty < o.jaoqty
AND o.japcmp = 0
AND p.hdjob = h.jhjob
AND p.hdpo = o.japo
AND p.hdseq = o.jaseq
これらの2つのステートメントはどちらも、必要な結果を返します。最初のステートメントは基本的に、o.japo = 0(nullになることはありません)の結果を返します。2つ目は、o.japoがゼロでない結果を返し、別のテーブルをデータに結合しようとします。UNION ALLを間に挟んでみましたが、調べたすべてのユニオンの例には、selectステートメントごとにunqiueWHEREステートメントがありませんでした。
。
私は最初に次のステートメント(以下)を試みましたが、o.japo = 0のときに複数行のデータを取得していて、なぜ余分な行を取得しているのか理解できませんでしたが、2番目の左の結合が正しくない/不要な結合であったと思われますデータ。o.japo = 0の場合、すべてのhpodt(p。)フィールドはnullであるはずですが、代わりにどこかからのデータが入力されています。
SELECT h.jhhold, h.jhjob, h.jhrev, o.jadesc, o.jaoqty, o.jacqty, o.japo, o.javend, p.hdprcd, p.hdrecd, p.hdseq
FROM Jhead AS h
LEFT JOIN jjops AS o ON h.jhjob = o.jajob
LEFT JOIN hpodt AS p ON h.jhjob = p.hdjob
WHERE (h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND o.japcmp = 0 AND p.hdjob = h.jhjob AND o.japo != 0 AND p.hdpo = o.japo AND p.hdseq = o.jaseq AND o.jaopr != 'PT') OR (h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND o.japcmp = 0 AND o.japo = 0 AND o.jaopr != 'PT')
ORDER BY h.jhjob, o.jaseq, p.hdrecd