where ifnull(table1.корпус,0) = ifnull(table2.корпус,0)
вот так, похоже, можно объединять таблицы с NULL.
А чем не нравитсся использовать 0 при отсутствии номера корпуса?
Могу предположить, что запрос передает в БД значения полей first_name и last_name без апострофов, поэтому возникает такая ошибка. Можно увидеть текст передаваемых запросов?
сколько было оплачено за определенную услугу и когда
Это несколько противоречит первоначальной задаче. Если надо указать даты всех платежей по одному начислению - клиент ведь мог их оплачивать несколькими платежами - тогда нужна отдельная таблица.
Если добавить поле "дата" в таблицу с начислениями, тогда, в лучшем случае, можно указать дату, когда начисление было оплачено полностью. Такой вариант на словах можно описать так:
1. Создаем для каждого клиента два курсора - с начислениями и оплатами и ставим указатели на первые записи в каждом, заводи переменную R = 0.
2. Вычисляем R = начисление - оплата + R.
3. Если R > 0 (недоплата), сдвигаем указатель оплат (переходим на следующую запись). Иначе ставим у начисления дату платежа и сдвигаем указатель и начислений, и оплат.
4. Если получилось сдвинуть один из указателей в предыдущем пункте (т.е. остались необработанные записи), возвращаемся на шаг 2.
Вроде так.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.