私はアプリケーションのような設定パラメータを格納するテーブルを有している:「設定セット」、各パラメータは、キー/値の組み合わせJPQLは非スカラーを結合しますか?
setName | key | value
----------------------------------
dev | FooEnabled | true
dev | BarEnabled | true
qa | FooEnabled | false
...etc...
特定に属し私は今
dev | FooEnabled | true
dev | BarEnabled | true
戻って取得したい私が選択したいと思いますので、私は"dev"
という名前の設定セット内のすべてのパラメーターを望んでいた場合
SELECT p Parameter p WHERE p.setName = :name
:それは特定のセット内のすべてのプロパティを選択するのは簡単です二組の組合:012とセットのプロパティよりname1
高い優先順位とセットでの特性を与えることによって、重複キーを持つ行を
SELECT p Parameter p WHERE p.setName = :name1 OR p.setName = :name2
...しかしなくします。 name1
は"qa"
だったとname2
が"dev"
た場合、これは、クエリが選択する必要があり、
dev | FooEnabled | true
qa | BarEnabled | false
を明確にするために戻ってくる:
- すべてのプロパティを設定してから名前
name2
、除いて... name1
という名前の同じキーを持つプロパティがあります。この場合、...- で行を選択してください代わりに、これを効率的に何をするかJPQLクエリ
setName = :name2
と行の?COALESCE
場合は非スカラー値で働いていた、そして私はこのような何かが仕事ができることを想像:
SELECT
COALESCE(x, y)
FROM Property x, Property y
WHERE
x.setName = :name1 AND
y.setName = :name2 AND
x.key = y.key
しかしCOALESCE
はスカラー値のみを受け入れます。何か案は?
その他のクエリは、/試みたが失敗しました:(もし
SELECT
CASE
WHEN (NOT EXISTS (SELECT y FROM Property y WHERE y.setName = :name1 AND y.key = x.key))
THEN x
ELSE y
END
FROM Property x
WHERE
x.setName = :name2
私は次のようになりますと仮定しkey
、によって、また同じように、個々の行を選択するに興味があります非スカラーの場合はCOALESCEのみ):
SELECT
COALESCE(y, x)
FROM Property x, Property y
WHERE
x.key = :key AND
x.setName = :name1 AND
y.key = :key AND
y.setName = :name2
(ちょうど私の心からのそれが試さなくても)、私は 'orderColumn'発注のポイントが表示されません... –
@Matt Ball私はあなたの文章を 'name2とのセットのプロパティよりもname1高い優先順位を持つプロパティを与えることで解釈しました。これは、一番上にname1、name2で一致するすべてのマッチングのセット内に要素を入れたいと思っています。下...おそらくそれは間違っている... – Omnaest