2011-07-13 7 views
0

私は、この列にキー、タイプ、カルチャを持つこのテーブルを持っています。クエリを選択し、述語値を確認しない

キーとカルチャはPKです。

私はクエリ実行前にキーとカルチャの値を知っています。

select * from resources r where r.CULTURE = 'sk' and r.KEY = 'test'; 

しかし、私は文化=「SK」とキー=「テスト」

+2

フィールド名に 'KEY'を付けるのは良いことではありません。ほとんどのRDBMSでは予約語です。 –

答えて

2
SELECT * FROM resources AS r WHERE r.type = 
(SELECT type FROM resources s where s.culture= 'sk' and s.key= 'test') 

cultureとレコードと同じ種類でも、他のすべてのレコードを選択することになるかを選択を実行したいのですがkeyはPKなので、サブクエリの型の値は1つだけ戻されます。その結果は、その型のすべての行を取得するために使用されます。サブクエリが複数の値を返す場合は、=の代わりにINを使用できます。

+2

+1このクエリでは 'type'にインデックスを付けることを忘れないでください。 – Tomalak

+0

参加が悪くなると思いますか? – user256034

0

ジョインを使用すると、パフォーマンスの問題が解決される可能性があります。

SELECT r.* 
FROM resources r 
    INNER JOIN resources r2 
     ON r.type = r2.type 
WHERE r2.CULTURE = 'sk' 
AND r2.KEY = 'test' 
+0

これがよりうまく実行されますかhttp://stackoverflow.com/questions/6676783/select-query-and-unknow-predicate-value/6676822#6676822? – user256034

+0

試してみてください!それは、インデックス、統計情報に依存します... –

関連する問題