2011-02-04 7 views
0

私は2つのテーブルを持っていますSQLクエリに依存する列

1つはキーワードです[id |キーワード|アカウント] k と1つはtemplateKeywordLink [templateId | keywordId] TKL

私は何をしたい(アカウント= 1)

は、私はまた、選択と呼ばれる別の列を追加するキーワードテーブルからすべてのキーワードを含む結果セットを取得することです。

k.id in (select templateId from templateKeywordLink)が選択されている場合は、「選択済み」を含める必要があります。それ以外の場合はnullにする必要があります

これは最適なクエリが何であるか疑問に思っていますか?

答えて

0

これを行うにはいくつかの方法があります。 1つの方法は、関心のあるIDを返すクエリに対して左結合を行うことです。

ほとんどのデータベースには、CASE文で行ったことを行うためのよりコンパクトな方法がありますが、CASEは使用したいリレーショナルデータベースに移植可能であることに注意してください。

SELECT k.* 
    , CASE 
     WHEN tkl.id IS NULL 
     THEN NULL 
     ELSE 'selected' 
    END as selected 
FROM keywords k 
    LEFT JOIN (
     SELECT DISTINCT templateId 
     FROM templateKeywordLink 
    ) as tkl 
    ON k.id = tkl.templateId 
関連する問題