2011-01-03 13 views
0

I C#でのMySQLのクエリで次のような問題があります。文字列のリストを考えると選択クエリ:空白を埋める

が、私は試合は、文字列を言っ任意の行をデータベースに照会します。文字列は、各文字列が複数の行と一致するという点でユニークです。今

SELECT Id FROM SomeTable 
WHERE SomeColumn IN("foo", "bar", "baz") 

、理想的には私が直接私がIN句に指定文字列のリストにクエリから結果をマッピングできるようにしたいと思います::今日は、私のクエリは次のようになります

String       Returned ID 
------------------------------------------ 
foo       123 
bar       NULL  <-- Missing row filled with NULL 
baz       42 

これは、クエリに渡すすべての文字列が1行に一致する限り正常に動作します。しかし、欠落している場合は、上記の例のように空白をNULLで埋めることにします。

これを行う方法はありますか?


編集:私はおそらく解決策は、文字列の多くに拡張する必要があることを指摘している必要があります。私が今やっていることは、IN句を一度に100回通すことです。

答えて

2

あなたはがこれを行うことができます:もちろん

SELECT 
    helper.SomeColumn, 
    SomeTable.Id 
FROM 
    (
    SELECT 'foo' AS SomeColumn 
    UNION SELECT 'bar' 
    UNION SELECT 'baz' 
) AS helper 
    LEFT JOIN SomeTable ON SomeTable.SomeColumn = helper.SomeColumn 

をあなたの代わりに、インラインで事前に(一時テーブルとして)ヘルパー表を作成することができます。

とにかく、あなたが持っているクエリ(WHERE SomeColumn IN (...))を実行するだけで、アプリケーション内の欠落している行を簡単に把握する方がよりスマートで効率的かもしれません。とにかくそれらをループするので気づくでしょう。

+0

ありがとうございます - これはコードでこれを行う方が良いと思います! –

2

あなたができることは、SELECT結果セットとしての文字列のセットであり、次にのSomeTable.SomeColumnになります。

1

はこれを試してみてください:

SELECT Id 
    FROM (
       SELECT "foo" SomeColumn 
       UNION ALL 
       SELECT "bar" AS SomeColumn 
       UNION ALL 
       SELECT "baz" AS SomeColumn 
      ) b 
      LEFT JOIN 
      SomeTable a 
ON a.SomeColumn = b.SomeColumn 
+0

お返事ありがとうございます! –

関連する問題