选择* FROM WHERE 0< 0

时间:2016-04-16 20:11:57

标签: android sqlite

我有两个表1用于类别,另一个表用于任务。

每个类别都有优先权。

我正在尝试选择具有最高优先级的类别(忽略没有任务的类别)

问题是如果所有类别都没有任务,则返回1个结果,所有字段为空

类别表包含以下列:

id

name

priority (int beween 1 to 5)

active

任务表包含以下列:

id

name

category (id from category table)

active

这是我的问题:

select cat.*, max(cat.priority) 
from categories cat 
WHERE (
        select count(*)  AS count 
        from schedules 
        WHERE schedules.category = cat.id 
          AND schedules.active = 1
       ) > 0

问题似乎是当子查询的结果为0时,主查询看起来像这样:

select cat.*, min(cat.priority) 
from categories cat 
WHERE 0 < 0

并返回空值

我在android上使用sqlite

1 个答案:

答案 0 :(得分:2)

只需在您的任务表上执行INNER JOIN,即可在没有任务的情况下过滤行。

请勿使用MAX()汇总功能,因为您没有GROUP BY,如果没有值符合您的过滤条件,则会返回NULL

如果您只想保留最高优先级,ORDER BY优先级DESCLIMIT结果返回到第一行

select cat.*
from categories cat 
INNER JOIN schedules 
   ON (schedules.category = cat.id)
WHERE schedules.active = 1
ORDER BY cat.priority DESC
LIMIT 1