2016-10-13 2 views
0

Сначала я хочу выбрать какой-столбец из bill_client и одной формы колонны bill_pkg и просто, как показано ниже:невозможно выбрать с помощью вложенного запроса в том, где положение

Запрос:

SELECT c.company_id, c.client_id, p.pkg_rate 
FROM bill_client c 
JOIN bill_pkg p on c.pkg_id=p.pkg_id 
WHERE c.status=1 

Я на самом деле пытается выбрать с где extract(year_month from curdate())>

SELECT c.company_id, c.client_id, p.pkg_rate 
FROM bill_client c 
JOIN bill_pkg p on c.pkg_id=p.pkg_id 
WHERE c.status=1 and extract(year_month from curdate())> 
(SELECT MAX(due_month) 
FROM bill_rent 
WHERE c.client_id=client_id and c.company_id=company_id 
GROUP BY client_id, company_id) 

Но это возвращение запрос только те ро w, где client_id соответствуют таблице bill_rent, не все строки из bill_client стол. Мне нужно проверить, что company_id с client_id еще нет bill_rent стол due_month column за текущий месяц. Любая помощь пожалуйста.

Вот схема таблицы:

tabll: bill_client

CREATE TABLE `bill_client` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`client_id` varchar(30) NOT NULL, 
`client_name` varchar(50) NOT NULL, 
`address` varchar(100) NOT NULL, 
`opening_balance` decimal(10,2) NOT NULL, 
`conn_charge` decimal(13,2) NOT NULL, 
`con_date` date NOT NULL, 
`mobile` varchar(12) NOT NULL, 
`pkg_id` int(11) NOT NULL, 
`conn_type` int(11) NOT NULL, 
`status` tinyint(1) NOT NULL DEFAULT '1', 
`area_id` int(11) NOT NULL, 
`managed_by` int(11) NOT NULL, 
`remarks` varchar(100) NOT NULL, 
`photo` varchar(50) DEFAULT NULL, 
`company_id` varchar(15) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=165 DEFAULT CHARSET=utf8 

стол: bill_pkg

CREATE TABLE `bill_pkg` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`pkg_id` int(11) NOT NULL, 
`pkg_name` varchar(10) NOT NULL, 
`pkg_rate` decimal(10,0) NOT NULL, 
`company_id` varchar(15) NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `pkg_name` (`pkg_name`) 
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 

стол: bill_rent

CREATE TABLE `bill_rent` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`company_id` varchar(15) NOT NULL, 
`client_id` varchar(10) NOT NULL, 
`due_month` varchar(6) NOT NULL, 
`pay_date` date NOT NULL, 
`amount_due` decimal(10,2) NOT NULL, 
`amount_paid` decimal(10,2) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 
+1

Извините, я не понимаю, что вы после. Pls предоставляет некоторые выборочные данные, ожидаемые результаты на основе выборочных данных и фактические результаты, полученные по вашему запросу. – Shadow

ответ

1

Если client_id не соответствует bill_rent таблицы MAX(due_month) будет NULL, поэтому сравнивая текущий месяц с этим не получится. Используйте IFNULL(MAX(due_month), ''), чтобы вы всегда получали действительное значение для сравнения.

SELECT c.company_id, c.client_id, p.pkg_rate 
FROM bill_client c 
JOIN bill_pkg p on c.pkg_id=p.pkg_id 
WHERE c.status=1 and extract(year_month from curdate())> 
(SELECT IFNULL(MAX(due_month), '') 
FROM bill_rent 
WHERE c.client_id=client_id and c.company_id=company_id) 
+0

все еще возвращает только соответствие 'client_id' с' bill_rent', я пытаюсь для всех строк из 'bill_client', где' max (due_month) null' и 'extract (year_month from curdate())> max (due_month)' –

+0

Можете ли вы сделать sqlfiddle с образцами данных? – Barmar

+0

Кстати, вам не нужен 'GROUP BY' в подзапросе, поскольку он выбирает только одного клиента и компанию. – Barmar

Смежные вопросы