MYSQL:查询两个案例总是显示两种情况

时间:2015-07-23 14:53:59

标签: mysql

有问题的查询是:

SELECT DISTINCT 
      t.name AS tname, 
      t.keyid AS tkeyid,
      t.task_group AS ttg,
      CASE WHEN (tgs.keyid = t.task_group AND p.keyid = tgs.proyect) THEN p.name ELSE 'N/A' END AS pname
      FROM tasks AS t, task_users AS tu, task_groups AS tgs, proyects AS p
      WHERE (tu.worker = 1 AND t.keyid = tu.task) ORDER BY tkeyid ASC;

查询应该显示在满足案例条件时在proyects表中注册的p.name,否则为N / A.任务中有多个条目,例如t.task_group = -1,因此不满足条件。这些在结果中正确显示。

但是,如果t.task_group是一个正数(对task_group的实际引用),查询会向我显示两个结果:

+----------------------+--------+------+-------------------------------+
| tname                | tkeyid | ttg  | pname                         |
+----------------------+--------+------+-------------------------------+
| Sensor de frecuencia |    170 |   11 | biblioteca_perifericos_01     |
| Sensor de frecuencia |    170 |   11 | N/A                           |

为什么要这样做?我该如何纠正呢?

1 个答案:

答案 0 :(得分:0)

好的,所以我一直坚持下去,我找到了一个可以做我想要的查询。我将它留在这里,以便它可以帮助有类似问题的人。

SELECT DISTINCT 
      t.name AS tname, 
      t.keyid AS tkeyid,
      t.task_group AS ttg,
      CASE WHEN (t.task_group != -1) THEN (SELECT p.name FROM proyects AS p, task_groups AS tg WHERE tg.keyid = t.task_group AND tg.proyect = p.keyid) ELSE 'N/A' END AS pname
      FROM tasks AS t, task_users AS tu
      WHERE (tu.worker = 1 AND t.keyid = tu.task) ORDER BY tkeyid ASC;

这更简单(至少在概念上)因为我只是在条件t.task_group = -1为真时查询我想要的数据。