0

私はMysqlクエリを次のように持っています:

select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
eemployee where RecordID like ? and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC=  CASE  WHEN COALESCE(?,'') = ''  THEN RecordDateTimeUTC  ELSE ?  END)........

今、私のクエリにはたくさんのフィールドがあります(? -->これは、ユーザーがクエリできるようにフィルターパーポーズ用にデータを配置している場所です)ので、合体を使用していますが、合体使用することの欠点は、null値が得られないことです従業員テーブルに存在するすべてのデータを取得したい場合は、null 値を取得するためにisNull 関数を使用しました。

今、私は上記のクエリを2つのユースケースでテストしています

1-->ユーザーは RecordID でパーセンテージを渡すことができます:-この場合、ユーザーはすべてのデータを null 値と非 null 値のいずれかで取得する必要があります。

    select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
        eemployee where RecordID like '%' 
and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC=  CASE  WHEN COALESCE('','') = ''  THEN RecordDateTimeUTC  ELSE ''  END)

2-->ユーザーは RecordDateTimeUTC に基づいてデータをフィルター処理できます:- ユーザーがこのパラメーターを渡すと、上記のフィルター処理を満たす null 以外のデータをすべて取得する必要があります。:-

select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
        eemployee where RecordID like '%' and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC=  CASE  WHEN COALESCE('2012-07-09 11:11:00','') = ''  THEN RecordDateTimeUTC  ELSE '2012-07-09 11:11:00'  END)

最初の使用例では問題なく動作していますが、2 番目の使用例では、フィルタリングされたデータと null データが得られます

したがって、上記の単一のクエリで両方のユースケースがサポートされるようにするには、クエリをどうする必要がありますか。MYSQl Query Browser を使用してクエリをテストしています

前もって感謝します

4

1 に答える 1

1

単一の静的 SQL ステートメントを使用しているときに、パラメーターをオプションにしようとしているようです。その場合、次のような意味だと思います。

SELECT RecordID,ID,Name,Description,RecordDateTimeUTC,Location 
FROM eemployee 
WHERE (@RecordId IS NULL OR RecordID LIKE @RecordId)
AND (@RecordDateTimeUTC IS NULL OR RecordDateTimeUTC = @RecordDateTimeUTC)

パラメータ値が NULL の場合、フィルタから完全に除外されます。それ以外の場合は、渡された値が使用されます。

パラメータを再利用する必要があるため、ここでは使用できないことに注意?してください-各パラメータを2回指定する場合を除きます。名前を指定すると、クエリがより読みやすくなります。

于 2013-07-16T07:52:41.620 に答える