Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Хм. Очередные траблы с JOIN! (laserjump) 04/12/2001 - 13:45:12
      Re: Хм. Очередные траблы с JOIN! (walrus) 04/12/2001 - 14:16:31
      Re: Хм. Очередные траблы с JOIN! (laserjump) 04/12/2001 - 14:37:22
      Re: Хм. Очередные траблы с JOIN! (walrus) 04/12/2001 - 15:08:45
      Re: Хм. Очередные траблы с JOIN (Anonymous) 04/12/2001 - 19:57:25

> Original message text:
> From: laserjump - 04/12/2001 - 13:45:12
> Subject:Хм. Очередные траблы с JOIN!
> -----------------
> Делаю так:
> ---------------------------------------------------------------
> SELECT
> a.IdClient,
> IF(((b.DollarRemains >= 0.0) OR (a.NoTimeExceed=1)), b.RubRemains, 0) AS SumRub,
> IF(((b.DollarRemains >= 0.0) OR (a.NoTimeExceed=1)), b.DollarRemains, 0) AS SumUSD
> FROM Clients a LEFT JOIN MonthRemains b USING (IdClient)
> WHERE (((MONTH(b.BeginMonthDate) = 11) AND (YEAR(b.BeginMonthDate) = 2001)) OR (b.IdClient is Null));
> ---------------------------------------------------------------
> получаю в ответ 148 записей (в таблице Clients - 160 и нужно в результате получить именно 160 записей)
>
> Если делаю по другому
> ---------------------------------------------------------------
> INSERT INTO TempTable1
> SELECT
> IdClient,
> RubRemains AS SumRub,
> DollarRemains AS SumUSD
> FROM MonthRemains
> WHERE (((MONTH(BeginMonthDate) = 11) AND (YEAR(BeginMonthDate) = 2001)));
>
> SELECT
> a.IdClient,
> IF(((b.SumUSD >= 0.0) OR (a.NoTimeExceed=1)), b.SumRub, 0) AS SumRub,
> IF(((b.SumUSD >= 0.0) OR (a.NoTimeExceed=1)), b.SumUSD, 0) AS SumUSD
> FROM Clients a LEFT JOIN TempTable1 b USING (IdClient);
> ---------------------------------------------------------------
> Получаю 160 записей, как и положено
> В чем грабли? Почему не работает первый вариант запросом?
>
> Заранее благодарен всем откликнувшимся.
>


From: laserjump - 04/12/2001 - 14:37:22
Subject:Хм. Очередные траблы с JOIN!
-----------------
--------------------------------------------------------------
SELECT * FROM Clients a LEFT JOIN MonthRemains b USING (IdClient)
WHERE (b.IdClient is Null)
выдает 6 записей для тех клиентов, у которых нет вхождений в таблице MonthRemains
естественно, в полях IdClient_1, BeginMonthDate и т.п. - NULL
--------------------------------------------------------------
SELECT * FROM MonthRemains
выдает 337 записей
--------------------------------------------------------------
SELECT * FROM Clients a LEFT JOIN MonthRemains b USING (IdClient)
выдает 443 записи, т.е. JOIN добивает этих 6 клиентов в результат запроса, что вполне логично
--------------------------------------------------------------

НАСКОЛЬКО Я ПОНЯЛ беда в том, что нужно делать JOIN именно после отбора данных по датам, иначе не добавляются записи для клиентов, не имеющих вхождений в этом месяце, но присутствующих в базе.
Однако вопрос остается: МОЖНО ЛИ ОБОЙТИСЬ ОДНИМ ЗАПРОСОМ, не используя временную таблицу


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
1017



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |