2016-08-24 13 views
0
Phone_book 
+----+---------+-----------+--------------+ 
| id | key  | code  | value  | 
+----+---------+-----------+--------------+ 
| 1 | MAX_VAL | 111  | reset  | 
+----+------+--------------+--------------+ 
| 2 | MIN_VAL | 222  | set  | 
+----+------+--------------+--------------+ 
| 3 | MIN_VAL | 0   | NA  | 
+----+---------+-----------+--------------+ 

主キーとコードの組み合わせが主キーです。結果がない場合は、別のクエリを1つのクエリに結合できますか?

要件:

KEYとCODEが存在する場合、戻り値。

キーが存在し、CODEコードの値を返す存在しない場合は0

実装:

は複数のクエリを使用してこれを達成しました。構文は、使用

2別のクエリを撮影しながら、これは、nullを返した場合どのような私が探してい"SELECT param FROM Phone_book param WHERE upper(key)=:paramKey AND code=:O";

)JPQL

1)"SELECT param FROM Phone_book param WHERE upper(key)=:paramKey AND code=:estCode";

ためのものです:私は

を達成することができますこれは1つのクエリ、またはより良い方法ですか?

ありがとうございます。

答えて

0

MySQLの関連する質問がMySQL当初

あなたはそれを試してみることができますタグ付けされたので:

SELECT 
defaultTable.`key`, 
COALESCE(queryTable.`value`,defaultTable.`value`) AS v 
FROM 
(
    SELECT 
    `key`, 
    `value` 
    FROM Phone_book 
    WHERE UPPER(`key`) = ? 
    AND `code` = 0 
) AS defaultTable 

LEFT JOIN 
(
    SELECT 
    `key`, 
    `value` 
    FROM Phone_book 
    WHERE UPPER(`key`) = ? 
    AND `code` = ? 
) AS queryTable 
ON defaultTable.`key` = queryTable.`key`; 

注:ご提供された値で疑問符を交換します。

keycode値のレコードが存在しない場合、queryTable.valueNULLになります。

したがってCOALESCEは、値がある場合はdefaulTableから選択します。

+0

このクエリはPlsqlですか? DBはplsqlです。 – user630209

+0

あなたの質問には 'mysql'タグがあり、これは生のmysqlクエリです。 – 1000111

+0

誤って追加しましたが、これをplsqlに変換しようとします。 – user630209

2

Oracle SQLでは、次のようにすれば十分です。このためにPLSQLを書く必要はありません。

SELECT key, 
     nvl(code,0)       -- This will make sure if code is null then value is 0 
FROM Phone_book 
WHERE (key is not NULL AND CODE IS NOT NULL) -- This will help in fetching value when KEY and CODE is present 
OR (key is not null and code is null);  -- This will help in fetching value when KEY is present and CODE is null. 
0
select 
case 
    when key is not null and code is not null then value 
    when key is not null and code is null then 0 
end 
from phone_book; 
+0

上記の表の列を見て、正しく応答してください。これは動作しません。 – XING

0
select value from (
    select value, row_number() over (order by case when code = 0 then 2 else 1 end) rn 
    from phonebook pb 
    where upper(key) = :paramKey and (code = :estCode or code = 0)) 
    where rn = 1 

選択値は、キー要求と機能row_numberと適切コードまたはコード0並べ替え、それらを要求し、最初の値をとるました。

関連する問題