2017-09-19 7 views
0

プロシージャを作成しています... この手順では4つのパラメータがあります。 この4つのパラメータを使用して、同じリストIDをテーブルから探したいとします。他の言葉でストアドプロシージャ内の4つのタプルの同じリストIDを探します

、すべてのIDが同じLIST_IDを持っているならば、 NULLを返さない場合は、LIST_IDを返し、いくつかのIDがNULLであるかもしれない、それがあれば失敗しない必要がありますので、いくつかの IDは、そのテーブルに繰り返されることを認めますIDがnullであるか、 繰り返し

難しい部分はありません、すべての時間が私は4つのIDが設定されていることを持っているということである、と私はNULLとして設定のみ2つのIDと他の二つのセットを持っているかもしれません。例えば

Table A 
------------------------ 
ID  List_ID  
------------------------ 

1  10  
2  10   
3  10   
4  10   

私が見る唯一の解決策は、このようなものです:

SET id1 = (Select List_ID From Table_A Where ID = _ID_Param1); 
SET id2 = (Select List_ID From Table_A Where ID = _ID_Param2); 
SET id3 = (Select List_ID From Table_A Where ID = _ID_Param3); 
SET id4 = (Select List_ID From Table_A Where ID = _ID_Param4); 

#Then I have to check if all ids are same 

IF id1 = id2 = id3 = id4 THEN I found the same List_ID 

そしていつか_ID_ParamがNULLに設定されているので、私は唯一の1または2または4つすべてを持っているかもしれません

申し訳ありませんが私はこれを非常によく説明していない場合...しかし、この状況を伝える方法がわからない、私の知識は限られています、私はいくつかの助けが必要です

UPDATE

これは私が必要なものに近いです:

SELECT 
    IF((
    MIN(List_ID) = MAX(List_ID) 
    AND COUNT(*) = (Select Count(*) From (SELECT _ID_Param1 AS val 
        UNION ALL 
        SELECT _ID_Param2 
        UNION ALL 
        SELECT _ID_Param3 
        UNION ALL 
        SELECT _ID_Param4) Temp Where Temp.val is not null 
       ) ) , List_ID, NULL 
    ) AS LID 
FROM table_a 

WHERE ID IN (_ID_Param1, _ID_Param2, _ID_Param3, _ID_Param4) 

だけ間違ったことは、それはパラメータがテーブルに存在しないとの重複があってもLIST_IDを返すということです他のパラメータとそれを2回カウントします。どのようにすべてがparamsはかどうかを確認するために、そのような場合を除外するようにして存在する

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

答えて

1

select @all_same := (min(List_ID) = max(List_ID) and count(*) = 4) 
from table_a 
where id in (_ID_Param1, _ID_Param2, _ID_Param3, _ID_Param4); 

これは、各idtable_aで一意であることを前提としています。それがあなたの質問をセットアップする方法です。

+0

これは私がやりたいことに近いと思われますが、_ID_Param3または_ID_Param4がNULLかNOT NULLの場合はどうなりますか? count(*)= n、NULLでないパラメータの数を変更する必要があります。これは、IF NOT NULLを使用してチェックし、グローバル変数にSET n = n +1を使用するか、それを行う良い方法がありますか? – Jigberto

+0

とにかく、ありがとう、それは私が必要なものに非常に近い、私はあなたの答えを受け入れた – Jigberto

+0

私の質問に更新を追加しました。ありがとう – Jigberto

1

あなたはタプル

Select List_ID, COUNT(*) as tuple 
FROM Table_A 
WHERE ID = _ID_Param_1 OR ID = _ID_Param_2 ... etc 
GROUP BY List_ID 
HAVING COUNT(*) = 4; 

これは、パラメータの特定のセットのために4回現れるList_IDsを返しますを見つけるために、COUNT集計関数を使用することができます。あなたは1つのクエリでこれを行うことができます

+0

ただし、_ID_Param2または_ID_Param3がNULLでNULLでない場合はどうなりますか? – Jigberto

+0

WHERE句で追加のORを使って簡単に処理できます。WHERE(ID = _ID_Param_1 OR _ID_Param_1 IS NULL)。カウントの意味がわからないのですが、NOT NULLパラメータの数に基づいてその数を変更できます。 – under

関連する問題