我执行一个查询,它给我的结果是4,5,6。如果我直接在where in子句中的查询b中使用这个结果,它会再次给出完美的结果。但是如果我在查询c中同时使用这两个查询,它不会生成任何答案。
查询a
SELECT `region`.`district_id`
FROM `region`
LEFT JOIN `regional_owner` ON `regional_owner`.`r_id` = `region`.`id`
WHERE `regional_owner`.`email_id` = 'balajibarhate10@gmail.com';
产生o/p-4,5,6,我在下面使用
查询b
SELECT sum(`purchase`.`purchase_ammount`), `franchise`.`district_id`
FROM `purchase`
LEFT JOIN `franchise` ON `franchise`.`id` = `purchase`.`f_id`
WHERE `franchise`.`district_id` in (
4,5,6
)
AND purchase.purchase_date BETWEEN Date_format(CURDATE(), "%Y-%m-01") AND CURDATE()
GROUP BY `franchise`.`district_id`
现在,我将上述两个查询合并为一个查询,如下所示
查询c
SELECT sum(`purchase`.`purchase_ammount`), `franchise`.`district_id`
FROM `purchase`
LEFT JOIN `franchise` ON `franchise`.`id` = `purchase`.`f_id`
WHERE `franchise`.`district_id` in (
SELECT `region`.`district_id`
FROM `region`
LEFT JOIN `regional_owner` ON `regional_owner`.`r_id` = `region`.`id`
WHERE `regional_owner`.`email_id` = 'balajibarhate10@gmail.com'
)
AND purchase.purchase_date BETWEEN Date_format(CURDATE(), "%Y-%m-01") AND CURDATE()
GROUP BY `franchise`.`district_id`
我不明白,哪一部分错了。请引导我。
1条答案
按热度按时间mcvgt66p1#
你的左关节没有什么意义;左连接一个表,然后在where子句中使用该表,消除左连接引入的任何空值,有效地将其转换为内部连接
这也是编写查询的一种更简单的方法:
如果你得不到结果,我就先把日期条款注解掉。还要注意的是,between是包容的,在处理日期时间时可能会很尴尬,例如
BETWEEN 2000-01-01 and 2000-01-31
遗漏了发生在例如200-01-31 12:34:56的记录,即使它们也发生在一月。。通常最好使用>=
以及<
除非你确定日期是离散的(没有时间)