Hallo,
Ich nehme mal an, das doppelte WHERE war im original SQL nicht vorhanden? ;-)).
SELECT A.auf_index, A.auf_auflagentermin, B.ba_lfnr, B.ba_datum, B.ba_arbeitsvermerk, B.ba_auflagentermin, B.ba_auflagentermin_ok
FROM auftrag A LEFT JOIN ba B ON (A.auf_index=B.auf_index)
where
(A.auf_typ='Auftrag' AND A.auf_auflagentermin IS NOT NULL AND A.auf_auflagentermin_ok IS NULL AND A.auf_auflagentermin>="2004-05-03" AND B.auf_index IS NULL)
OR
(A.auf_typ='BA' AND B.ba_auflagentermin IS NOT NULL AND B.ba_auflagentermin_ok IS NULL AND B.ba_auflagentermin>="2004-05-03"
AND A.auf_index=B.auf_index)
^Wenn das zutrifft, dann gilt: B.auf_index IS NOT NULL
AND
(A.auf_typ='Auftrag' AND B.ba_auflagentermin_ok IS NULL AND B.ba_auflagentermin IS NOT NULL OR A.auf_typ='BA')
=>
(A.auf_typ='Auftrag' AND A.auf_auflagentermin IS NOT NULL AND A.auf_auflagentermin_ok IS NULL AND A.auf_auflagentermin>="2004-05-03" AND B.auf_index IS NULL)
OR
(A.auf_typ='BA' AND B.ba_auflagentermin IS NOT NULL AND B.ba_auflagentermin_ok IS NULL AND B.ba_auflagentermin>="2004-05-03"
AND B.auf_index IS NOT NULL)
AND
(A.auf_typ='Auftrag' AND B.ba_auflagentermin_ok IS NULL AND B.ba_auflagentermin IS NOT NULL OR A.auf_typ='BA')
Zuordnung:
A.auf_typ='Auftrag' = X0
A.auf_auflagentermin IS NOT NULL = X1
A.auf_auflagentermin_ok IS NULL = X2
A.auf_auflagentermin>="2004-05-03" = X3
B.auf_index IS NULL = X4; B.auf_index IS NOT NULL = NOT X4
A.auf_typ='BA' = X5
B.ba_auflagentermin IS NOT NULL = X6;
B.ba_auflagentermin_ok IS NULL = X7;
B.ba_auflagentermin>="2004-05-03" = X8
=>
(X0 AND X1 AND X2 AND X3 AND X4)
OR
(X5 AND X6 AND X7 AND X8 AND NOT X4)
AND
(X0 AND X7 AND X6 OR X5)
http://www-ihs.theoinf.tu-ilmenau.de/~sane/projekte/karnaugh/embed_karnaugh.html
Leider können hier nur maximal 6 Variablen betrachtet werden. Wir betrachten deshalb nur:
(X5 AND X6 AND X7 AND X8 AND NOT X4)
AND
(X0 AND X7 AND X6 OR X5)
und erhalten:
(NOT X4 AND X8 AND X7 AND X6 AND X5)
=>
where (X0 AND X1 AND X2 AND X3 AND X4) OR
(NOT X4 AND X8 AND X7 AND X6 AND X5)
=>
where (A.auf_typ='Auftrag' AND A.auf_auflagentermin IS NOT NULL AND A.auf_auflagentermin_ok IS NULL AND A.auf_auflagentermin>="2004-05-03" AND B.auf_index IS NULL) OR
(B.auf_index IS NOT NULL AND B.ba_auflagentermin>="2004-05-03" AND B.ba_auflagentermin_ok IS NULL AND B.ba_auflagentermin IS NOT NULL AND A.auf_typ='BA')
Angaben ohne Gewähr ;-))
Die Vorgehensweise sollte aber klar sein. Wenn Du Lust hast, kannst Du auch einen eigenen Karnaugh-Plan aufstellen, der dann alle Variablen abdeckt. Zur Theorie des Minimierungsverfahrens nach Karnaugh habe ich auf die Schnelle nichts wirklich umfassendes gefunden. Hier http://maui.theoinf.tu-ilmenau.de/~sane/skript_new/node27.html#SECTION00042100000000000000 wird es kurz und _sehr_ mathematisch beschrieben. Eventuell hat jemand einen besseren Link. Der würde mich auch interessieren.
viele Grüße
Axel