mysql - 查询选择多个表
问题描述
你好,
我需要选择所有COMISSIONARIO和所有FATURA 的他们。但我不知道怎么做。我尝试了一个如下图所示的查询,但它不起作用。它显示了所有的FATURA,但只有一个FATURA的COMISSIONARIO
解决方案
我正在根据某些状态从您的最终 WHERE 子句开始稍微反转您的查询。由于 Comissionario 表在状态上是 WHERE “必需”,因此我将其移至查询的第二个位置。然后将其余的表返回到 fatura 表。
select
f.valor valor_fatura,
f.numero numero,
f.id_cliente,
des.nome despachante,
v.nome vendedor,
tipo.tipo tipo_commisionado,
u.unidade unidade_cobranca,
com.valor_comissao taxa,
if( u.unidade = 'moeda',
com.valor_comissao,
FORMAT(( ( com.valor_comissao * f.valor ) / 100 ), 2 )
) valor_comissao,
f.created_at,
f.updated_at,
f.created_by,
f.updated_by
from
-- start with all commisionario status (alias cs)
ComissionarioStatus cs
-- now on to comissionario (alias com) that match key status
JOIN comissionario com
on cs.id_comissionariostatus = com.id_comissionariostatus
-- now the tipo and unicob with shorter alias
left join ComissionarioTipo tipo
on com.id_comissionariotipo = tipo.id_comissionariotipo
left join Unicob u
on com.id_unicob = u.id_unicob
-- now getting the individual
join Individuo des
on com.id_comissionado = des.id_individuo
join captacao cap
on des.id_individuo = cap.id_despachante
left join proposta p
on cap.id_proposta = p.id_proposta
left join Individuo v
on p.id_vendedor = v.id_individuo
join fatura f
on cap.id_captacao = f.id_captacao
where
-- where the one status you want
cs.status = 'ativo'
这只是一个开始,但是如果您查看您的查询,您会尝试查找与 Comissionario 记录相关联的 Fatura 记录,因此要获取其中的每一个,您需要一个常规的 JOIN 来将记录拉到一起。
此外,如果您查看表格的缩进级别,您可以看到我是如何从一个表格跳到下一个表格的,以及左侧表格(第一个表格)中的 ID 键如何与右侧表格上的 ID 匹配(第二个表格)表加入 TO)。我相信看到 A -> B -> C,您首先要保证表之间的关系。可选的将是左连接,就像您最初在某些上所做的那样。但是由于您的 where 子句是基于特定状态的,这会强制任何左连接进入 comissionario 表以进行 JOIN。所以现在,要从那个回到 fatura,每个后续关联也需要是一个 JOIN 与左连接。
现在,说了这么多,让我们尝试澄清您在最终输出中寻找的内容。您的图表显示了许多表格和关系,但请退后一步。您需要什么零件......来自 Comissionario 桌子和 Fatura 桌子的东西?如果是这样,请提供从一个到另一个的关系表的最短链接。这些都将是直接的 JOIN 条件。以此开始您的查询。一旦你解决了这个问题,现在开始在适用的情况下使用左连接来附加其他元素。例如,接下来我将添加具有特定状态的 ComissionarioStatus 表。
当您逐渐使用 JOIN 或 LEFT JOIN 添加每个附加表时,找出哪个破坏了您期望的结果集并问自己为什么...应该是 LEFT JOIN 吗?或不。
对表使用更短但更有意义的别名也有帮助。
推荐阅读
- url - 防止导航 Vue.js/Nuxt.js 上的 url 更改
- laravel - 使用 Laravel 图像干预,如何从 URL 获取图像并调整大小
- c# - 有没有办法在 Expression.New() 中使用 DI
- spring - 在 Spring RESTful 服务的上下文中,“表示”和“bean”是否相同
- python - 在处理请求时,我的套接字服务器如何与主线程上的终端交互?
- javascript - 向原型函数发送参数
- gradle - 从 3.1 迁移到 5.1 时出现 GRADLE 错误
- python - 卡在从页面中提取标题和下一页 url
- python - 重复二维数组的行
- kotlin - Accessing outer scope with qualified this in extension functions for inner classes