mysql - (MySQL) 当使用完整的 where 条件时,结果变为 0,但当我输入单个条件时,值结果出现为 true

标签 mysql

我尝试连接 5 个表并根据最后一个位置确定它。

这是矩阵。

Matrix

我做到了,但问题是我应该选择所有连接表上的所有字段以帮助进行比较,之后我添加案例来确定最后一个位置。这就是我得到的结果。

Result

当我放置 count() 并添加单个 where 条件时,结果显示与实际情况相同。

这是结果(采样)

Sampling

但是当我尝试在所有条件下对它进行计数时,结果变成了 0。 它与我想要的上面的矩阵(输出)不同。

Output

我的问题是:

  1. 可以简单地编写脚本,无需任何选择列作为帮助器,只需选择(拒绝、Cair、待处理、处理中)?
  2. 当我输入所有 where 条件时,它会变成 0,除了当我输入单个条件时,结果显示与实际情况相同。

这是我的查询:

SELECT 
a.id_cabang DTBO, b.id_cabang REJECT, c.id_cabang CAIR, d.id_cabang PENDING, e.id_cabang INPROSES,
count( CASE WHEN 
    b.id_cabang
    IS NULL THEN 0 ELSE b.id_cabang END ) AS reject
, 
count( CASE WHEN
    b.id_cabang
    IS NULL THEN c.id_cabang ELSE 0 END) AS cair
, 
count( CASE WHEN
    c.id_cabang
    IS NOT NULL THEN 0 ELSE d.id_cabang END) AS pending
, 
count( CASE WHEN
    b.id_cabang IS  NULL 
    AND 
    c.id_cabang IS  NULL 
    AND 
    d.id_cabang IS  NULL
    THEN e.id_cabang ELSE 0 END) AS inproses
FROM dtbo_tbl AS a 
LEFT JOIN 
(
    SELECT id_cabang FROM reject_tbl 
) AS b
ON a.id_cabang = b.id_cabang
LEFT JOIN 
(
    SELECT id_cabang FROM cair_tbl 
) AS c
ON a.id_cabang = c.id_cabang
LEFT JOIN
(
    SELECT id_cabang FROM pending_tbl
) AS d
ON a.id_cabang = d.id_cabang
LEFT JOIN
(
    SELECT id_cabang FROM inproses_tbl
) AS e
ON a.id_cabang = e.id_cabang
WHERE 
( CASE WHEN 
    b.id_cabang
    IS NULL THEN 0 ELSE b.id_cabang END ) > 0
AND
( CASE WHEN
    b.id_cabang
    IS NULL THEN c.id_cabang ELSE 0 END) > 0
AND
( CASE WHEN
    c.id_cabang
    IS NOT NULL THEN 0 ELSE d.id_cabang END) > 0
AND
( CASE WHEN
    b.id_cabang IS  NULL 
    AND 
    c.id_cabang IS  NULL 
    AND 
    d.id_cabang IS  NULL
THEN e.id_cabang ELSE 0 END) > 0 

谢谢。

最佳答案

嗯,我找到了答案。

SELECT 
 a.id_cabang DTBO, b.id_cabang REJECT, c.id_cabang CAIR, d.id_cabang PENDING,e.id_cabang INPROSES,
 COUNT( CASE WHEN b.id_cabang IS NULL THEN NULL ELSE b.id_cabang END ) AS reject, 
 COUNT( CASE WHEN b.id_cabang IS NULL THEN c.id_cabang ELSE NULL END) AS cair, 
 COUNT( CASE WHEN c.id_cabang IS NOT NULL THEN NULL ELSE d.id_cabang END) AS pending, 
 COUNT( CASE WHEN b.id_cabang IS  NULL AND c.id_cabang IS NULL AND d.id_cabang IS NULL THEN e.id_cabang ELSE NULL END) AS inproses 
FROM dtbo_tbl AS a 
 LEFT JOIN 
 (
  SELECT id_cabang FROM reject_tbl 
 ) AS b
 ON a.id_cabang = b.id_cabang
 LEFT JOIN 
 (
  SELECT id_cabang FROM cair_tbl 
 ) AS c
 ON a.id_cabang = c.id_cabang
 LEFT JOIN
 (
  SELECT id_cabang FROM pending_tbl
 ) AS d
 ON a.id_cabang = d.id_cabang
 LEFT JOIN
 (
  SELECT id_cabang FROM inproses_tbl
 ) AS e
 ON a.id_cabang = e.id_cabang
 WHERE 
 ( CASE WHEN b.id_cabang IS NULL THEN NULL ELSE b.id_cabang END ) > 0
 OR
 ( CASE WHEN b.id_cabang IS NULL THEN c.id_cabang ELSE NULL END) > 0
 OR
 ( CASE WHEN c.id_cabang IS NOT NULL THEN NULL ELSE d.id_cabang END) > 0
 OR
 ( CASE WHEN b.id_cabang IS NULL AND c.id_cabang IS  NULL 
             AND d.id_cabang IS NULL THEN e.id_cabang ELSE NULL END) > 0

关于mysql - (MySQL) 当使用完整的 where 条件时,结果变为 0,但当我输入单个条件时,值结果出现为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951141/

相关文章:

mysql - 向触发器添加注释(描述)

php - 以远程用户身份连接到数据库

mysql - 使用存储过程将XML中的Html数据保存到sql

MySQL MyISAM - 在 LIVE 环境中插入比在本地需要更长的时间

mysql:在数据库中查找西里尔文或希腊文文本

mysql - 更改其中一列的类型后是否需要重新创建索引?

php - 棘手的 Eloquent 查询

php - 网页不打印winsock信息

mysql - SQL - 从具有公共(public)字段的组中获取不同的记录

mysql 唯一键