Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2015, 12:47   #1
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию SQL использование JOIN LEFT не дает нужного результата

Доброе время.

Помогите плиз составить запрос.

Есть три таблицы
main
--------
main.id
main.regdate
main.cid (=client.id)
main.money

client
--------
client.id
client.refby (=client.id)

bonus
--------
bonus.id
bonus.cid (=client.id)
bonus.usedate

Делаю запрос

sql1
Код:
select main.regdate,  main.cid, main.money, client.id, client.refby
FROM main, client
WHERE main.cid=client.id AND main.money>0 AND client.refby=2
Получаю список клиентов которые заплатили money>0, которых привел клиент с id=2.


далее SELECT sum(money) получаю сумму, рассчитываю BONUS=2% от sum и вывожу в программе для клиента с id=2.

Клиент с id=2 может рассчитаться этим бонусом.
Тогда в таблицу BONUS заносим данные id клиента (то есть 2 в нашем случае) и текущую дату (поле bonus.usedate). Сегодня 10.04.2015

Внимание вопрос
=============
как правильно поправить sql1 чтоб результатом был тот же список, но чтобы main.regdate>=bonus.usedate И если в таблице BONUS нет записи для клиента 2 то вывести полный список из таблицы sql1 ?

пробовал так
sql2
Код:
SELECT main.regdate,  main.cid, main.money, main.removed, client.id, client.refby, bonus.cid as bcid, bonus.fdate
FROM main, client LEFT JOIN bonus ON main.regdate>bonus.fdate
WHERE main.removed=0 AND main.cid=client.id AND main.money>0 AND client.refby=2
получаю

а мне нужно чтоб список начинался с 10.04.2015

Есть идеи?
Yuran вне форума Ответить с цитированием
Старый 12.04.2015, 10:16   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
SELECT main.regdate,  main.cid, main.money, main.removed, client.id, client.refby, bonus.cid as bcid, bonus.fdate
FROM main
INNER JOIN client on  main.cid=client.id
LEFT JOIN bonus ON  main.cid =bonus.id 
WHERE main.removed=0 AND main.money>0 AND client.refby=2
     and ( main.regdate>bonus.fdate ---  чтоб результатом был тот же список, но чтобы main.regdate>=bonus.usedate 
         or bonus.fdate is null ---  И если в таблице BONUS нет записи для клиента 2 то вывести полный список из таблицы sql1
           )
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 12.04.2015, 11:49   #3
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Спасибо, попробую.
Yuran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LEFT JOIN kuba1981 SQL, базы данных 3 21.11.2013 08:00
left join kilogram SQL, базы данных 5 14.07.2012 05:13
запрос с left join KatrinSecret SQL, базы данных 2 18.01.2012 22:31
Псевдоним для результата left join vedro-compota SQL, базы данных 8 26.12.2011 00:28
LEFT JOIN acidcool SQL, базы данных 12 20.08.2009 19:23