2016-04-16 10 views
1

カテゴリには2つのテーブルがあり、タスクには2つのテーブルがあります。選択* FROM WHERE 0 <0

すべてのカテゴリが優先されます。

私はこの問題は、すべてのカテゴリが何の仕事を持っていない場合、それはすべてのフィールドはnullで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 

それはnull値を返します

私はsqlite o n android

+0

を返しました。 'testView'と' schedule'の構造体を追加できますか?彼らにあなたがより良い質問をするための共通鍵を持っているかどうかを知りたいのですが。あなたが示したもので何かを持って来ることは不可能です –

+0

あなたのリプレイをありがとう。私は質問を –

+0

を更新しました。それは良いです、私は今料理しています;)確かに、_Tasks_テーブルは 'schedule'テーブルですか? –

答えて

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 
+0

です。これは、すべてのschedules.active = 0の場合はNULL値を持つ1行も戻します。 –

+0

このようにしますか? –

+0

がまだ動作しないようにするWHERE節の 'schedules.active = 1'を移動しました:http://sqlfiddle.com/#!9/f9a7d8 –

関連する問題