1

わかりました、私が入手したシステムは、Ingres データベースに基づいたかなり時代遅れの ERP システムです。データベース スキーマは...まあ...あまり良くありません (実際には正規化されていません) が、基本的にはうまくいきます。データベースに関する変更はできませんのでご了承ください。

次の SQL ステートメントを検討してください。

SELECT
  -- some selected fields here
FROM    
    sta_artikelstamm s
    left join sta_chargen c on c.artikel_nr = s.artikel_nr and c.lager != 93
    left join sta_artikelbeschreib b on s.artikel_nr = b.artikel_nr  and b.seite = 25 and b.zeilennr = 1
    left join sta_einkaufskonditionen ek on s.artikel_nr = ek.artikel_nr AND s.lieferant_1 = ek.kunden_nr
    left join sta_kundenstamm ks on ek.kunden_nr = ks.nummer AND ks.nummer = s.lieferant_1
    left join tab_teilegruppe2 tg2 on s.teilegruppe_2 = tg2.teilegruppe
WHERE 
    (s.status = 0)
AND 
    (s.teilegruppe_2 IS NOT NULL) AND (s.teilegruppe_2 != '') 

これまでのところ、これは期待どおりに機能し、正確に 40742 件の結果が返されました。結果セットは問題ないように見えます。数値は予想と一致し、ステートメントは重複を示していません。関連テーブルの一部のフィールドにはエントリが含まれていない可能性があるため、LEFT JOIN を明示的に使用しますが、それでもメインの記事テーブルからの情報を保持したいと考えています。

現在、テーブル tab_teilegruppe2 は 3 つのフィールドで構成されています (bezeichnung = description、teilegruppe = part group == 主キー、taricnr - このフィールドは無視してください。null であるか、いくつかの値が含まれている可能性がありますが、必要ありません)。

次の SQL 部分を追加して、特定の部分グループに表示されない行のみを結果セットに含めます。したがって、SQL ステートメントの最後に次の行を追加しました。

AND (s.teilegruppe_2 NOT IN (49,57,60,63,64,65,66,68,71,73,76,77,78,79,106,107))

私は決して SQL の専門家ではありませんが (おそらく既にお察しのとおりです)、追加の WHERE ステートメントで行を追加するのではなく、行を削除するべきではありませんか? この単純な追加ステートメントを WHERE 句に追加するとすぐに、85170 行の結果が得られます。

「NOT IN」ステートメントに関係していると推測していますが、なぜ突然以前よりも多くの行を取得するのかわかりません。誰でも私のエラーを探す場所を教えてもらえますか?

4

1 に答える 1