2012-01-16 3 views
4

は、私はこの種の どのように条件の値に応じてmysqlのクエリ結果を作成する?

ID  Status 
100  Viewed 
103  Not Viewed 
105  Viewed 

を入れてほしい。これは私のsqlです:ステータステーブルに他のIDが任意のエントリを持っていないので、

select id, status from status_table where ID in (100, 101,102,103,104,105); 

それは上記の結果が表示されます。 ID is foreign key of another table named as table_file table. It contains in another database. So I cannot join the table due to some performance issue.私はカンマ区切りの値としてファイルIDを渡しています。しかし、私はこのような結果が欲しいどのように私はループを使用してこれを作成することができます。

ID Status 
100 Viewed 
101 Not 
102 Not 
103 Viewed 
104 Not 
105 Viewed 

可能でしょうか?私を助けてください。

答えて

1

これらのIDが存在するテーブルがありますか?あなたはそれに加わることができるように?

SELECT 
    source.ID, 
    status.value 
FROM 
    source 
LEFT JOIN 
    status 
    ON status.id = source.id 
WHERE 
    source.ID in (100, 101,102,103,104,105); 

もしそうでなければ、一時テーブルまたはインラインテーブルを作成する必要があります。次に、そのテーブルをデータに結合するだけです。

EDITインラインテーブルの

例。これを行うにはいくつかの方法がありますが、これは単なる1つです。

IDが欠落しているとき、あなたはこのようにそれを行うことができます 'ない' と仮定すると、
SELECT 
    source.ID, 
    status.value 
FROM 
    (
    SELECT 100 AS id UNION ALL 
    SELECT 101 AS id UNION ALL 
    SELECT 102 AS id UNION ALL 
    SELECT 103 AS id UNION ALL 
    SELECT 104 AS id UNION ALL 
    SELECT 105 AS id 
) 
    AS source 
LEFT JOIN 
    status 
    ON status.id = source.id 
+0

デモ私のソーステーブルとステータステーブルは2つの異なるデータベースに存在します。だから参加できません。いくつかのパフォーマンスの問題を修正するために私のSQLを書き換えています。テーブルの作成、挿入、フェッチ、最終的に一時テーブルの削除はウェブサイトのパフォーマンスの改善をもたらさないと思います。 – learner

+0

@learner - 次に、一時テーブルがどれほど速くなるかを過小評価します。しかし、インラインテーブルを検討してみてください...私は今例として編集します... * [また、これはあなたがそれを尋ねたようにあなたの質問に答えることに注意してください]] * – MatBailie

0

:リアルdatabase names

SELECT 
    so.ID, 
    CASE WHEN st.value IS NULL THEN 'Not' ELSE st.value END 
FROM 
    databasename1..source so 
LEFT JOIN 
    databasename2..status st 
    ON st.id = so.id 
WHERE 
    so.ID in (100, 101,102,103,104,105) 

代替databasename1databasename2

+0

申し訳ありませんソーステーブルに参加できません。他の提案をお願いします。 – learner

+0

そして、私が今言ったことはどうですか? –

関連する問題