2016-07-28 5 views
-2

タスクの実行の有無に基づいて、「キー」プロジェクトとも見なされる、もっとも小さいが最も近いIDを持つプロジェクトの名前を表示するクエリを作成する必要がありますコードは空です。これは少し複雑に見えるかもしれませんが、私は単純化する単純化されたコードに入れましょう:ifnullを使用してテンポラリテーブルを作成する方法

だから、
ifnull (Task_Code, 

create Key_temp 

select id_temp 
    task_is_key_temp 
    task_id_temp 
    proj_name_temp 

from projetos_main pm left join pcrs 
ON pcrs.num_doc = pm.Task_code 

where task_id_temp <= task_id and 
task_is_sum_temp = 'true' 

order by id desc 
limit 1 

、タスクコードがnullのとき、私は一時テーブルを作成したい、私からの情報を移入メインテーブルを作成し、「キープロジェクト」であり、元のIDよりも低いIDを持つ1つの結果を取得します。

問題は、私は次の操作を行うときのように、「IFNULL」を使用して一時テーブルを作成することが可能である場合、私は知らない、次のとおりです。

ifnull(Task_code, 
     CREATE TABLE Key_temp ...) 

私は構文エラーを取得します。だから私のコードは間違っているのでしょうか?

編集

ここでは、テーブルの構造です:

Pcrs 
Num_doc| 
1  | 
2  | 
-  | 



Projetos_main 
Id || Task_is_key || Task_id || Proj_name || Task_code | 
1 || False || 3 || Name 1 ||  1  | 
2 || True  || 5 || Name 2 ||  2  | 
3 || False || 5 || Name 3 ||  -  | 

Task_codeはNum_docを参照する外部キーです。しかし、すべてのプロジェクトがTask_Codeを持っているわけではありません。そのため、キープロジェクトでもある最も近いIDを持つプロジェクトの名前を表示する必要があります。

プロジェクト3で停止し、Task_codeが空であることを認識し、同じtask_idを持ち、key_taskであるProject 2を取得する必要があります。

+0

は、あなたがのために一時テーブルを何が必要でしょうか? –

+0

ロジックは少し複雑ですが、絶対に必要な場合は質問に含めることができます。したほうがいい? – RazorFinger

+0

私は基本的に同じテーブルの異なる行と列の情報を含める必要があります – RazorFinger

答えて

1

今、私はあなたの構造を見ることができることを、私はこれを試してみた:

SELECT pm.* 
    , IFNULL(
     pm.Task_code, 
     SELECT Task_id -- or perhaps just id? 
     FROM Projetos_main pm2 
     WHERE pm2.id < pm.id 
     ORDER BY pm2.id DESC LIMIT 1 
     ) 
FROM Projetos_main pm 
+0

これは私が必要としていたものです。忍耐強くありがとう。 – RazorFinger

+1

あなたは大歓迎です:)サブクエリのために行がたくさんある場合、これが遅くなるかもしれないことに注意してください。 –

1

IFNULLは、列のNULL値の可変性に応じて2つの引数のいずれかを返します。

Create table Temp select ... 

上記は有効な戻り値ではありません。このクエリは機能しません。

関連する問題