mysql - 条件左连接或 Where SQL 查询
问题描述
我有显示一些数据的查询,然后我离开加入一个表,但有一段时间,该表没有数据。
是否有任何可能的查询来添加条件左连接或 where 子句?
$sql = "SELECT
mm.idno as idno,
TRIM(UPPER(CONCAT(mm.fname, ' ', mm.mname, ' ', mm.lname))) as fullname,
TRIM(UPPER(mm.branchname)) as branchname,
TRIM(UPPER(mm.address)) as outlet_address,
(SUM(dr.totalamt)/GREATEST(1,COUNT(DISTINCT drr.id)) - SUM(drr.totalamt)/GREATEST(1,COUNT(DISTINCT dr.id))) as total_amount
FROM 8_membermain mm
LEFT JOIN 8_directsalessummary dr
ON mm.idno = dr.idno
LEFT JOIN 8_drreturnsummary drr
ON mm.idno = drr.idno
WHERE mm.status > 0 AND dr.status = 1
AND dr.ispaid = 'Full Payment'
AND dr.trandate BETWEEN '".$date1."' AND '".$date2."'
AND drr.trandate BETWEEN '".$date1."' AND '".$date2."'";
有时没有数据可以输入,8_drreturnsummary
但我添加了AND drr.trandate BETWEEN '".$date1."' AND '".$date2."'"
所以我的查询有问题。我只想8_drreturnsummary
成为可选/有条件的以及WHERE ... AND drr.trandate
. 我尝试了任何可能的方法,但我失败了。
解决方案
我将使用一个更简单的查询作为示例。在此查询中:
select *
from TableA left outer join TableB on TableA.Field1 = TableB.Field1
where TableB.Field2 = 'somevalue'
WHERE 子句排除任何不匹配的 TableA 记录,因为在这种情况下,所有 TableB 值都将为 NULL。您可以将其视为“加入后过滤器”。
我想你想要一个“预加入过滤器”。你可以这样做:
select *
from TableA left outer join
(select * from TableB where TableB.Field2 = 'somevalue') as TableB
on TableA.Field1 = TableB.Field1
推荐阅读
- .net-core - .NET Core 2.2 发布因缺少 *.pdb 和 *.xml 而失败
- spring - 在 DTO 中我们可以使用 id 作为 String 还是 Long
- c# - C#中的#符号是什么
- python - 如何将 CSV 导入到两个使用 Python 相互引用的不同 SQL 表中
- vue.js - 无法安装 vuetify
- java - 如何检查一个类是否依赖 CDI 来创建实例?
- typescript - 具有客户端实用程序定义结构的基本 TypeScript NodeJS 程序,使用严格的编码规则
- python - 无法导入 .py 文件,没有名为“文件名”的模块错误
- python - 摆脱嵌套的for循环
- android - document.data 给出无用的数据