mysql - 条件语句 - MYSQL
问题描述
我需要用 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';
解决方案
我认为一点点错误是你理解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 () 括号来更改逻辑。
推荐阅读
- php - 显示 Wordpress 博客文章类别
- android-studio - Flutter 和 Android Studio 中的内存不足错误
- macos - expo-cli 和 react-native-app 的“npm install”问题/失败
- javascript - ReactJS:根据其背后的页面背景更改顶部栏的颜色
- python-3.x - 将 Go 的 PutUint16 转换为 Python
- validation - 应用验证类时引导输入宽度发生变化
- javascript - 仅使用前端时如何获取 HTTPS SSL 证书
- mysql - 获得最好的 6 门科目,包括 mysql 查询中的必修科目
- ios - 注销用户时如何切换 UINavigationController 的根视图控制器(Swift 5)
- highcharts - 如何去除highchart的类别标签边距?