Murkasfjphy
Grünschnabel
MySQL - Abfrage über mehrere Tabellen mit UNION
Hallo,
es gibt ein Problem mit der folgenden Abfrage:
(select distinct
testdb.rs_test.id,
testdb.rs_test.breite,
testdb.rs_test.bild,
testdb.rs_test.hersteller,
testdb.rs_test.lang,
testdb.rs_test.lager,
testdb.rs_test.vk_preis,
testdb.rs_preis_calc.von_preis,
testdb.rs_preis_calc.bis_preis,
testdb.rs_preis_calc.euro_aufschlag,
testdb.rs_preis_calc.proz_aufschlag,
testdb.rs_test2.id,
testdb.rs_test2.lager,
GREATEST(if (euro_aufschlag>0 and vk_preis > 0 , (vk_preis*1) + euro_aufschlag, 0),
if (proz_aufschlag>0, (vk_preis*1)+(vk_preis*(proz_aufschlag/100)), 0),vk_preis) AS akpreis,
GREATEST(if (euro_aufschlag>0 , (vk_preis*1) + euro_aufschlag, 0),
if (proz_aufschlag>0, (vk_preis*1)+(vk_preis*(proz_aufschlag/100)), 0),vk_preis) AS vkpreis
from testdb.rs_test, testdb.rs_preis_calc
where ((vk_preis > von_preis) and (vk_preis <= bis_preis)
and (99991 = testdb.rs_preis_calc.db_id) and
(0 = testdb.rs_preis_calc.preisgruppe))and
(testdb.rs_test.breite = '50') and
(testdb.rs_test.lang = '200') and
(testdb.rs_test.hersteller like 'Ikea%'))
UNION
(
testdb.rs_test.id,
testdb.rs_test.breite,
testdb.rs_test.bild,
testdb.rs_test.hersteller,
testdb.rs_test.lang,
testdb.rs_test.lager,
testdb.rs_test.vk_preis,
testdb.rs_preis_calc.von_preis,
testdb.rs_preis_calc.bis_preis,
testdb.rs_preis_calc.euro_aufschlag,
testdb.rs_preis_calc.proz_aufschlag,
testdb.rs_test2.id,
testdb.rs_test2.lager,
from testdb.rs_test1, testdb.rs_test2, testdb.rs_preis_calc
where (testdb.rs_test.id = testdb.rs_test2.id)
)
Und zwar bekomme ich die Fehlermeldung: "#1222 - The used SELECT statements have a different number of columns" wenn ich diese Abfrage in phpMyAdmin ausführe.
Es liegt wohl daran, das ich in dem ersten Select eine Greatest() Funktion habe, in dieser wird ein zusätzliches Feld "akpreis" erzeugt. Weder die Funktion Greatest() noch das Feld akpreis wird aber in dem 2. Select nicht gebraucht. Was kann ich dann an Stelle der Greatest() Funktion bzw. an Stelle von akpreis angeben damit beide Selects wieder die gleiche Anzahl an Feldern haben?
Oder liegt das Problem etwa ganz wo anderst?
Danke für jeden Tipp!
Gruß Marcel
Hallo,
es gibt ein Problem mit der folgenden Abfrage:
(select distinct
testdb.rs_test.id,
testdb.rs_test.breite,
testdb.rs_test.bild,
testdb.rs_test.hersteller,
testdb.rs_test.lang,
testdb.rs_test.lager,
testdb.rs_test.vk_preis,
testdb.rs_preis_calc.von_preis,
testdb.rs_preis_calc.bis_preis,
testdb.rs_preis_calc.euro_aufschlag,
testdb.rs_preis_calc.proz_aufschlag,
testdb.rs_test2.id,
testdb.rs_test2.lager,
GREATEST(if (euro_aufschlag>0 and vk_preis > 0 , (vk_preis*1) + euro_aufschlag, 0),
if (proz_aufschlag>0, (vk_preis*1)+(vk_preis*(proz_aufschlag/100)), 0),vk_preis) AS akpreis,
GREATEST(if (euro_aufschlag>0 , (vk_preis*1) + euro_aufschlag, 0),
if (proz_aufschlag>0, (vk_preis*1)+(vk_preis*(proz_aufschlag/100)), 0),vk_preis) AS vkpreis
from testdb.rs_test, testdb.rs_preis_calc
where ((vk_preis > von_preis) and (vk_preis <= bis_preis)
and (99991 = testdb.rs_preis_calc.db_id) and
(0 = testdb.rs_preis_calc.preisgruppe))and
(testdb.rs_test.breite = '50') and
(testdb.rs_test.lang = '200') and
(testdb.rs_test.hersteller like 'Ikea%'))
UNION
(
testdb.rs_test.id,
testdb.rs_test.breite,
testdb.rs_test.bild,
testdb.rs_test.hersteller,
testdb.rs_test.lang,
testdb.rs_test.lager,
testdb.rs_test.vk_preis,
testdb.rs_preis_calc.von_preis,
testdb.rs_preis_calc.bis_preis,
testdb.rs_preis_calc.euro_aufschlag,
testdb.rs_preis_calc.proz_aufschlag,
testdb.rs_test2.id,
testdb.rs_test2.lager,
from testdb.rs_test1, testdb.rs_test2, testdb.rs_preis_calc
where (testdb.rs_test.id = testdb.rs_test2.id)
)
Und zwar bekomme ich die Fehlermeldung: "#1222 - The used SELECT statements have a different number of columns" wenn ich diese Abfrage in phpMyAdmin ausführe.
Es liegt wohl daran, das ich in dem ersten Select eine Greatest() Funktion habe, in dieser wird ein zusätzliches Feld "akpreis" erzeugt. Weder die Funktion Greatest() noch das Feld akpreis wird aber in dem 2. Select nicht gebraucht. Was kann ich dann an Stelle der Greatest() Funktion bzw. an Stelle von akpreis angeben damit beide Selects wieder die gleiche Anzahl an Feldern haben?
Oder liegt das Problem etwa ganz wo anderst?
Danke für jeden Tipp!
Gruß Marcel
Zuletzt bearbeitet: