Выберите запрос с предложением IN: заполнение пробелов - PullRequest
0 голосов
/ 03 января 2011

У меня следующая проблема с запросом MySQL в C #:

Учитывая список строк, я хочу запросить в базе данных любые строки, которые соответствуют указанным строкам.Строки уникальны тем, что каждая строка соответствует не более чем одной строке.Сегодня мой запрос выглядит примерно так:

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

Это прекрасно работает, если все строки, которые я передаю в запрос, совпадают со строкой.Однако, если один из них отсутствует, я бы хотел заполнить пустое значение NULL, как в примере выше.

Есть ли способ сделать это?Редактировать: Я, вероятно, должен был указать, что решение должно масштабироваться до большого количества строк.То, как я делаю это прямо сейчас, заключается в том, что я пропускаю 100 через предложение IN.

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Вы могли бы сделать это:

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 (...)) и просто выяснить недостающие строки в вашем приложении.Вы все равно будете их зацикливать, так что вы заметите.

2 голосов
/ 03 января 2011

То, что вы могли бы сделать, это SELECT набор строк как результирующий набор, а затем LEFT JOIN on SomeTable.SomeColumn.

1 голос
/ 03 января 2011

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...