Abfrage mit UNION

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
 
Zuletzt bearbeitet:
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?

Hallo Murkasjfphy,

bilde doch einfach irgendein Feld. Ist doch eigentlich egal was Du da rein schreibst. Ich würde NULL nehmen.

Code:
(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,
NULL,
NULL
from testdb.rs_test1, testdb.rs_test2, testdb.rs_preis_calc 
where (testdb.rs_test.id = testdb.rs_test2.id) 
)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück