【问题标题】:CONDITIONAL STATEMENT - MYSQL条件语句 - MYSQL
【发布时间】:2020-01-18 13:15:20
【问题描述】:

我需要用 3 个条件构建一个查询,但所有尝试过的表单都返回给我这三个表,即使它们有空值。

我尝试使用左连接和左外连接,但没有成功

如何只取回已输入数据的表格?

SELECT * FROM tb_associado AS associado 
INNER JOIN tb_ProdutoComercial AS comercial ON associado.id_prodcomerc_a = comercial.id_prodcomerc
INNER JOIN tb_ProdAnsS4E AS sq ON comercial.id_ProdutoS4E_c = sq.nu_CodProdutoS4E
INNER JOIN tb_meiopagto AS tmp ON associado.id_meiopagto_a = tmp.id_meiopagto

LEFT JOIN tb_pgtoboleto AS tb ON (associado.id_associado = tb.cd_associado_pb AND tmp.cd_codmeiopagto = '3' AND tb.cd_associado_pb <> NULL) -- cond 1

LEFT JOIN tb_pgtocartao AS tc ON (associado.id_associado = tc.cd_associado_pc AND tmp.cd_codmeiopagto = '1' AND tc.cd_associado_pc <> NULL) -- cond 2

LEFT JOIN tb_pgtodebito AS td ON (associado.id_associado = td.cd_associado_pd AND tmp.cd_codmeiopagto = '2' AND td.cd_associado_pd <> NULL) -- cond 3

WHERE associado.id_associado = '311';


【问题讨论】:

  • 在所有条件下将...&lt;&gt; NULL 替换为... IS NOT NULL
  • @forpas 还是不行
  • 您没有明确说明您希望查询返回什么。 (没有做你想要的代码并没有告诉我们你想要什么。)你的写作也不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。描述结果:说足够多的人可以离开并带着解决方案回来。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。

标签: mysql join conditional-statements


【解决方案1】:

我认为一点点错误是你理解 NULL 的方式。 LEFT JOIN 一开始就已经提升了 NULL。 LEFT JOIN 比 INNER JOIN 更松散。

为了获得所有记录的可能 NOT NULL。您必须在更大的查询中转移 NULL 条件。

SELECT * FROM tb_associado AS associado 
INNER JOIN tb_ProdutoComercial AS comercial ON associado.id_prodcomerc_a = comercial.id_prodcomerc
INNER JOIN tb_ProdAnsS4E AS sq ON comercial.id_ProdutoS4E_c = sq.nu_CodProdutoS4E
INNER JOIN tb_meiopagto AS tmp ON associado.id_meiopagto_a = tmp.id_meiopagto

LEFT JOIN tb_pgtoboleto AS tb 
   ON (associado.id_associado = tb.cd_associado_pb AND tmp.cd_codmeiopagto = '3' ) -- cond 1

LEFT JOIN tb_pgtocartao AS tc
    ON (associado.id_associado = tc.cd_associado_pc AND tmp.cd_codmeiopagto = '1') -- cond 2

LEFT JOIN tb_pgtodebito AS td 
   ON (associado.id_associado = td.cd_associado_pd AND tmp.cd_codmeiopagto = '2') -- cond 3

WHERE associado.id_associado = '311'
AND  tb.cd_associado_pb <> NULL   -- condition 1
 AND tc.cd_associado_pc <> NULL -- condition 2
 AND td.cd_associado_pd <> NULL  -- condition 3
;

一系列的 AND 条件有点严格。您可以应用 OR 和一组 for ( ) 括号来更改逻辑。

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2014-06-19
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2012-08-17
    • 2013-01-29
    相关资源
    最近更新 更多