При объединении не выводятся значения если их нет во второй таблице

filips

Новичок
При объединении не выводятся значения если их нет во второй таблице

Есть 2 таблицы, в первой список телефонов, во второй сумма за месяц для каждого телефона и объединяются они по лицевому счету

проблема в том что если в каком то месяце для телефона нет суммы то этот телефон не выводится вообще

SELECT t.id id, t.telephon, t.scet, t.fio, dek.money dek, jan.money jan, feb.money feb
FROM telephone t
LEFT JOIN komis dek ON ( t.scet = dek.scet )
LEFT JOIN komis jan ON ( t.scet = jan.scet )
LEFT JOIN komis feb ON ( t.scet = feb.scet )
WHERE t.scet = dek.scet
AND t.scet = jan.scet
AND t.scet = feb.scet

AND (
YEAR( dek.time ) = '2006'
AND YEAR( jan.time ) = '2007'
AND YEAR( feb.time ) = '2007'
)
AND (
MONTH( dek.time ) = '12'
AND MONTH( jan.time ) = '01'
AND MONTH( feb.time ) = '02'
)
GROUP BY t.telephon
ORDER BY t.telephon ASC;
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Причина в том, что дополнительно линкуете "месячные" таблицы по условию WHERE

-~{}~ 04.04.07 12:43:

SELECT t.id id, t.telephon, t.scet, t.fio, dek.money dek, jan.money jan, feb.money feb
FROM telephone t
LEFT JOIN komis dek ON ( t.scet = dek.scet )
LEFT JOIN komis jan ON ( t.scet = jan.scet )
LEFT JOIN komis feb ON ( t.scet = feb.scet )
WHERE

t.scet = dek.scet
AND t.scet = jan.scet
AND t.scet = feb.scet



AND (
YEAR( dek.time ) = '2006'
AND YEAR( jan.time ) = '2007'
AND YEAR( feb.time ) = '2007'
)
AND (
MONTH( dek.time ) = '12'
AND MONTH( jan.time ) = '01'
AND MONTH( feb.time ) = '02'
)
GROUP BY t.telephon
ORDER BY t.telephon ASC;
 

filips

Новичок
без
t.scet = dek.scet
AND t.scet = jan.scet
AND t.scet = feb.scet

результат тот же самый

пытался еще вывести вот так

WHERE
(
t.scet = dek.scet
AND YEAR( dek.time ) = '2006'
AND MONTH( dek.time ) = '12'
)
OR(
t.scet = jan.scet
AND YEAR( jan.time ) = '2007'
AND MONTH( jan.time ) = '01'
)
OR (
t.scet = feb.scet
AND YEAR( feb.time ) = '2007'
AND MONTH( feb.time ) = '02'
)

но сервер вешается
 

filips

Новичок
да, теперь выводит все телефоны у которых есть сумма хотя бы в 1 месяце (но в других месяцах выводится этаже сумма а не NULL)

и если для данного номера нет суммы вообще то номер не выводится

SELECT t.id id, t.telephon, t.scet, t.fio, dek.money dek, jan.money jan, feb.money feb
FROM telephone t
LEFT OUTER JOIN komis dek ON ( t.scet = dek.scet )
LEFT OUTER JOIN komis jan ON ( t.scet = jan.scet )
LEFT OUTER JOIN komis feb ON ( t.scet = feb.scet )
WHERE (
YEAR( dek.time ) = '2006'
OR YEAR( jan.time ) = '2007'
OR YEAR( feb.time ) = '2007'
)
AND (
MONTH( dek.time ) = '12'
OR MONTH( jan.time ) = '01'
OR MONTH( feb.time ) = '02'
)
GROUP BY t.telephon
ORDER BY t.telephon ASC
LIMIT 0 , 6000;
 

alpine

Новичок
filips
Попробуй так:
[sql]
SELECT t.id id, t.telephon, t.scet, t.fio, SUM(IFNULL(dek.money,0)) dek, SUM(IFNULL(jan.money,0)) jan, SUM(IFNULL(feb.money,0)) feb
FROM telephone t
LEFT JOIN komis dek ON ( t.scet = dek.scet AND dek.time >= '2006-12-01' AND dek.time < DATE_ADD('2006-12-01', INTERVAL 1 MONTH) )
LEFT JOIN komis jan ON ( t.scet = jan.scet AND jan.time >= '2007-01-01' AND jan.time < DATE_ADD('2007-01-01', INTERVAL 1 MONTH) )
LEFT JOIN komis feb ON ( t.scet = feb.scet AND feb.time >= '2007-02-01' AND feb.time < DATE_ADD('2007-02-01', INTERVAL 1 MONTH) )
GROUP BY t.id
ORDER BY t.telephon
[/sql]
 

filips

Новичок
alpine, огромно спасибо

только вот эта строчка мне не очень понятна
DATE_ADD( '2007-02-01', INTERVAL 1
MONTH )

где можно ман по этому почитать?
 
Сверху