У каждого учащегося есть несколько периодов оплаты, я хочу выбрать период времени, за который плата не уплачена, или на MySQL
языке - получить строку, которой нет в другой таблице.
Здесь я использую вложенные GROUP_CONCAT
в MySQL
и LEFT JOIN
с IS NULL
Таблица student
- списки студентов
id | ttl | cls | sec
===============================
1 | Rohit | 1 | 1
2 | Karuna | 2 | 0
Таблица cls
- списки класса
id | ttl
===========
1 | One
2 | Two
Таблица sec
- списки разделов
id | ttl
===========
1 | A
2 | B
Таблица fee_tm
- списки Период оплаты услуг
id | ttl
===========
1 | Jan
2 | Feb
Таблица std_fee
- списки стоимости обучения, назначенной студенту
id | s_id| f_id| fee| f_tm
====================================
1 | 1 | 4 | 100| 1
В соответствии со структурой таблиц и строк в таблице я ожидаю после вывода с моим кодом MySQL.
//(student.id-student.cls-student.sec-student rest of the fee.time(Month1,Month2..))
1-Rohit-One-A-Feb,
2-Karuna-Two-John,Feb
но то, что я получаю (я хочу подать NULL
и LEFT JOIN
только за время оплаты , так что оставшееся время оплаты можно получить, но здесь это применимо ко всему результат)
2-Karuna-Two-
SQL Fiddle
MySQL Code
SELECT
GROUP_CONCAT(DISTINCT CONCAT(student.id,'-',student.ttl,'-',cls.ttl,'-',
COALESCE(sec.ttl,''),
COALESCE(CONCAT('-',fee_tm.ttl),''))
ORDER BY student.id) AS stdt
FROM
student
JOIN
cls ON cls.id=student.cls
LEFT JOIN
sec ON sec.id=student.sec
LEFT JOIN
std_fee ON std_fee.s_id = student.id
LEFT JOIN
fee_tm ON fee_tm.id = std_fee.f_tm
WHERE
std_fee.f_tm IS NUll