raczej UNION nie da rady, to by musialo tak wygladac ale to nie spełnia UNION bo tma pisze oba zapytania musza gnerowac taka sama ilosc kolumn, wiec to nie SPEŁNIA ZAŁOŻENIA.
więc UNION nie pasuje chyba że masz jakiś sposób na to ja jakoś tej zasady nie moge obejsc.
SELECT obId, obName, obStateId, obPriceOn, obConfirm, obDateEnd, obTypeId, obCity, obRoom, obTeren, obNearby
FROM object
INNER JOIN promocja ON object.obId = promocja.oglId
WHERE promocja.obDateEnd
BETWEEN '2012-08-01'
AND '2012-12-30'
GROUP BY promocja.oglId
UNION
SELECT a.obId, a.obName, a.obStateId, a.obPriceOn, a.obConfirm, a.obDateEnd, a.obTypeId, a.obCity, a.obRoom, a.obTeren, a.obNearby, b.typeId,
typeName, typeNameen, typeNamedo,
c.stateId, c.stateName
FROM object AS a, type AS b, state AS c
WHERE a.obTypeId = b.typeId AND a.obStateId = c.stateId AND a.obConfirm = '1' AND a.obDateEnd > NOW()