Hallo Ihr Lieben,
ich habe folgendes Problem, zwei Tabellen (siehe Create unten).
Diese Versuche ich mit einem LEFT JOIN zu verknüpfen.
Primary Key von auftrag ist auf_index und der foregin key von ba ist ebenfalls auf_index. Es gibt also immer ein auf_index in auftrag aber nicht immer ein auf_index in ba.
Folgender Join wird benutzt:
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
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) and ((A.auf_typ='Auftrag' and B.ba_auflagentermin_ok is NULL and B.ba_auflagentermin is not NULL or A.auf_typ='BA')) ORDER BY B.ba_auflagentermin desc, A.auf_index desc;
Wie kann man die Abfrage optimieren? ich will nur Datensätze wo ein auf_auflagentermin!=NULL und ba_auflagentermin!=NULL vorhanden ist.
Kann man die Verknüpfung vor der Where Clausel einschränken?
Tabelle auftrag hat ca 4000 Datensätze und ba ca. 1000.
Table structure for table 'auftrag'
CREATE TABLE auftrag (
auf_datum date default NULL,
auf_auftrag blob,
auf_bearb2 varchar(50) default NULL,
auf_index bigint(20) NOT NULL auto_increment,
auf_auftragsart varchar(20) NOT NULL default '',
auf_auflagentermin date default NULL,
auf_auflagentermin_ok tinyint(3) unsigned default NULL,
PRIMARY KEY (auf_index)
) TYPE=MyISAM;
Table structure for table 'ba'
CREATE TABLE ba (
ba_lfnr bigint(20) NOT NULL auto_increment,
ba_datum date default NULL,
ba_auflagentermin date default NULL,
ba_auflagentermin_ok tinyint(3) unsigned default NULL,
PRIMARY KEY (ba_lfnr),
UNIQUE KEY ba_lfnr (ba_lfnr)
) TYPE=MyISAM;
Vielen Dank für die Hilfe
RObert