Ich habe versucht die SQL-Abfrage etwas umzuschreiben und alles "wahre" in "ware" umzubennen.
CREATE TABLE kunde (
kunde_id INT NOT NULL,
kunde_name VARCHAR(50) NOT NULL,
kunde_category_type_id INT NOT NULL,
kunde_hidden INT NOT NULL,
kunde_type_id INT NOT NULL,
PRIMARY KEY (kunde_id)
);
CREATE TABLE ware (
ware_id INT NOT NULL,
ware_name VARCHAR(50) NOT NULL,
ware_type_id INT NOT NULL,
ware_string VARCHAR(50) NOT NULL,
PRIMARY KEY (ware_id)
);
CREATE TABLE warenkorb_turbo (
warenkorb_turbo_id INT NOT NULL,
kunde_id INT NOT NULL,
ware_id INT NOT NULL,
warenkorb_id INT NOT NULL,
warenkorb_type_id INT NOT NULL,
PRIMARY KEY (warenkorb_turbo_id)
);
SELECT k.*
FROM kunde k
JOIN (SELECT kunde_ID FROM warenkorb_turbo #die neue assoziation (kunde_id, warenkorb_id, ware_id)
WHERE warenkorb_TYPE_ID = 1
AND ware_ID IN
(
select ware_ID from ware
where ware_TYPE_ID=104 #gemüse
AND (ware_STRING='Karotte' OR ware_STRING='Kartoffel')
UNION ALL
select ware_ID from ware
where ware_TYPE_ID=109 #obst
AND ware_STRING='Apfel'
UNION ALL
select ware_ID from ware
where ware_TYPE_ID=113 #haushaltswaren
AND (ware_STRING='Topf' OR ware_STRING='Schüssel' OR ware_STRING='messer')
UNION ALL
select ware_ID from ware
where ware_TYPE_ID=431 #Elektronikwaren
AND ware_STRING='Radio'
)
) kauf
ON k.kunde_id = kauf.kunde_id
WHERE k.kunde_TYPE_ID = 3 #ignoriert das mal, das sind zusätzliche einschränkungen
AND k.kunde_CATEGORY_TYPE_ID = 3000 # - || -
AND k.kunde_HIDDEN = 0 ;
Jetzt muss nur noch das selbe wie bei Deiner Abfrage rauskommen.
Grüße
Thomas