объединение двух строк таблици в одну

VadimSh

Новичок
объединение двух строк таблици в одну

Всем доброго дня суток!
Второй день ломаю голову над запросом, чето никак не родится
Есть таблица с пользователями "oids" и таблица с трафиком "summary"

Summary
| unit_oid | policy_oid | t_from | bytes_in | bytes_out |

Нужно вывести данный всех видов трафика(policy_oid) одной строкой
Ниже приведен вариант как я это организовал, но если одит из типов трафика за период "t_from" отсутствует то и остальные не отображаются т.к. не выполняется условие
Собственно это и есть проблема.
Может кто подскажет?

[SQL]
SELECT s.t_from , s.bytes_in as s0, s.bytes_out as s1, ss.bytes_in as s2, ss.bytes_out as s3
FROM oids as o
LEFT JOIN summary as s on s.unit_oid = o.oid
LEFT JOIN summary as ss on ss.unit_oid = o.oid
WHERE o.oid=1040157
AND s.policy_oid=866177 AND s.prefix='D' AND s.t_from >= 1159639200
AND s.t_from <= 1167587999 AND DATE_FORMAT(FROM_UNIXTIME(s.t_from), '%Y%m%%d')=DATE_FORMAT(FROM_UNIXTIME(ss.t_from), '%Y%m%%d')
AND ss.policy_oid=317322 AND ss.prefix='D' AND ss.t_from >= 1159639200 AND ss.t_from <= 1167587999
[/SQL]
 

alpine

Новичок
VadimSh
Твоя проблема решается эмулированием FULL OUTER JOIN(в MySQL не реализован) используя UNION запросов LEFT JOIN и RIGHT JOIN.
Подробнее в поиск.

-~{}~ 06.12.06 14:08:

FULL OUTER JOIN
 

VadimSh

Новичок
поискал... почитал... попробовал... неполучается
может кто даст ссылачку на более подробную инфу?
 

chira

Новичок
для начала попробуй так:
Код:
SELECT s.t_from, s.bytes_in AS s0, s.bytes_out AS s1, ss.bytes_in AS s2, ss.bytes_out AS s3
FROM oids AS o
  LEFT JOIN summary AS s ON s.unit_oid = o.oid
   AND s.policy_oid = 866177
   AND s.prefix = 'D'
   AND s.t_from >= 1159639200
   AND s.t_from <= 1167587999
  LEFT JOIN summary AS ss ON ss.unit_oid = o.oid
   AND DATE_FORMAT( FROM_UNIXTIME( s.t_from ) , '%Y%m%%d' ) = DATE_FORMAT( FROM_UNIXTIME( ss.t_from ) , '%Y%m%%d' )
   AND ss.policy_oid = 317322
   AND ss.prefix = 'D'
   AND ss.t_from >= 1159639200 AND ss.t_from <= 1167587999
WHERE o.oid = 1040157
 
Сверху